Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

3 страниц V   1 2 3

Приделать zoom для золотого калаша

Статус пользователя filip
сообщение 20.2.2015, 17:55
Сообщение #21


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

Просто удивительно, иногда в подобных темах не дождешься ответа, а тут прям под конкретные требования переделывают)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
progamer
сообщение 20.2.2015, 21:40
Сообщение #22
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

Цитата(GOOD FELLOW @ 20.2.2015, 16:22) *
progamer, ты серьезно? Я в своей теме еще тебе скинул, лично под тебя переделанный голд ак47, с зумом, с возможностью передать/поднять psych.gif


Спасибо, но в нем тоже проблемы!! (((
В той теме я отписал глюки твоего варианта:
1) Заходишь за Т. Если хоть раз покупаешь золотой калаш, то дальше через покупаешь ОБЫЧНЫЙ калаш, а покупается золотой
Короче потом до конца карты обычный калаш вообще не купишь (((
2) Когда передаешь золотой калаш. На пол бросается модель золотого калаша, а если её поднимает другой игрок, то у него в руках становится обычный калаш.
А если сам свой калаш поднимаешь то золотой..
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 21.2.2015, 20:37
Сообщение #23


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

Код:
#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <amxmisc>
#include <engine>
#include <fakemeta_util>

#define is_valid_player(%1) (1 <= %1 <= 32)

new AK_V_MODEL[64] = "models/zm/v_ak47_vulcan.mdl"
new AK_P_MODEL[64] = "models/zm/p_ak47_vulcan.mdl"
new AK_W_MODEL[64] = "models/zm/w_ak47_vulcan.mdl"
/* Pcvars */
new cvar_dmgmultiplier, cvar_goldbullets, cvar_custommodel, cvar_uclip, cvar_cost

new bool:g_HasAk[33]

new g_hasZoom[ 33 ]
new bullets[ 33 ]

// Sprite
new m_spriteTexture

const Wep_ak47 = ((1<<CSW_AK47))

public plugin_init()
{

/* CVARS */
cvar_dmgmultiplier = register_cvar("goldenak_dmg_multiplier", "1")
cvar_custommodel = register_cvar("goldenak_custom_model", "1")
cvar_goldbullets = register_cvar("goldenak_gold_bullets", "0")
cvar_uclip = register_cvar("goldenak_unlimited_clip", "1")
cvar_cost = register_cvar("goldenak_cost", "0")

// Register The Buy Cmd
register_clcmd("say /goldenak", "CmdBuyAk")
register_clcmd("say_team /goldenak", "CmdBuyAk")
register_concmd("amx_goldenak", "CmdGiveAk", ADMIN_LEVEL_G, "<name>")

// Register The Plugin
register_plugin("Golden Ak 47", "1.0", "AlejandroSk")
// Death Msg
//register_event("DeathMsg", "Death", "a")
// Weapon Pick Up
register_event("WeapPickup","checkModel","b","1=19")
//Замена w_ модели
register_forward(FM_SetModel, "fw_SetModel")
// Current Weapon Event
register_event("CurWeapon","checkWeapon","be","1=1")
register_event("CurWeapon", "make_tracer", "be", "1=1", "3>0")
// Ham TakeDamage
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
//регистрируем соприкосновение с оружием (в руках)
RegisterHam(Ham_Touch, "armoury_entity", "fwdTouch")
//регистрируем соприкосновение с оружием, лежащим на земле (дропнули или убили игрока и оно выпало)
RegisterHam(Ham_Touch, "weaponbox", "fwdTouch")
register_forward( FM_CmdStart, "fw_CmdStart" )
//RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)
register_logevent("logevent_round_end", 2, "1=Round_End")
}

public client_connect(id)
{
g_HasAk[id] = false
}

public client_disconnect(id)
{
g_HasAk[id] = false
}
/*
public Death()
{
g_HasAk[read_data(2)] = false
}
*/
public logevent_round_end()
{

new players[32], num
get_players(players,num,"h")
for(new i=0;i<num;i++)
{
if( is_user_alive(players[i]) && g_HasAk[players[i]])
return PLUGIN_HANDLED
g_HasAk[players[i]] = false
}
return PLUGIN_HANDLED
}
/*
public fwHamPlayerSpawnPost(id)
{
g_HasAk[id] = false
}
*/
public plugin_precache()
{
precache_model(AK_V_MODEL)
precache_model(AK_P_MODEL)
precache_model(AK_W_MODEL)
m_spriteTexture = precache_model("sprites/dot.spr")
precache_sound("weapons/zoom.wav")
}
//Проверка модели в руках
public checkModel(id)
{
if ( !g_HasAk[id] )
return PLUGIN_HANDLED

new szWeapID = read_data(2)

if ( szWeapID == CSW_AK47 && g_HasAk[id] == true && get_pcvar_num(cvar_custommodel) )
{
set_pev(id, pev_viewmodel2, AK_V_MODEL)
set_pev(id, pev_weaponmodel2, AK_P_MODEL)
}
return PLUGIN_HANDLED
}

public checkWeapon(id)
{
new plrClip, plrAmmo, plrWeap[32]
new plrWeapId

plrWeapId = get_user_weapon(id, plrClip , plrAmmo)

if (plrWeapId == CSW_AK47 && g_HasAk[id])
{
checkModel(id)
}
else
{
return PLUGIN_CONTINUE
}

if (plrClip == 0 && get_pcvar_num(cvar_uclip))
{
// If the user is out of ammo..
get_weaponname(plrWeapId, plrWeap, 31)
// Get the name of their weapon
give_item(id, plrWeap)
engclient_cmd(id, plrWeap)
engclient_cmd(id, plrWeap)
engclient_cmd(id, plrWeap)
}
return PLUGIN_HANDLED
}
//эта функция оставляет модельку после того, когда игрока убили
public fw_SetModel(entity, model[])
{
if(!pev_valid(entity))
return FMRES_IGNORED

static szClassName[33]
pev(entity, pev_classname, szClassName, charsmax(szClassName))

if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED

static id
id = pev(entity, pev_owner)

if(equal(model, "models/w_ak47.mdl"))
{
static weapon
weapon = fm_find_ent_by_owner(-1, "weapon_ak47", entity)

if(!pev_valid(weapon))
return FMRES_IGNORED

if(g_HasAk[id])
{
set_pev(weapon, pev_impulse, 1942)
engfunc(EngFunc_SetModel, entity, AK_W_MODEL)

//g_HasAk[id] = false

return FMRES_SUPERCEDE
}
}

return FMRES_IGNORED
}

// Эта функция работает корректно (не выдает игрокам без флага s оружие, которое лежит на полу), но она не выводит оповещения
public fwdTouch( ent, id ) {
if( !is_valid_ent(ent) || !is_user_alive(id))
return HAM_IGNORED

new modelname[32]
entity_get_string(ent, EV_SZ_model, modelname, 31)
if(equali(modelname, "models/zm/w_ak47_vulcan.mdl"))
{
//return HAM_SUPERCEDE
g_HasAk[id] = true
}

return HAM_IGNORED
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CSW_AK47 && g_HasAk[attacker] )
{
SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmgmultiplier ) )
}
}

public fw_CmdStart( id, uc_handle, seed )
{
if( !is_user_alive( id ) )
return PLUGIN_HANDLED

if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
{
new szClip, szAmmo
new szWeapID = get_user_weapon( id, szClip, szAmmo )

if( szWeapID == CSW_AK47 && g_HasAk[id] == true && !g_hasZoom[id] == true)
{
g_hasZoom[id] = true
cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 0 )
emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
}

else if ( szWeapID == CSW_AK47 && g_HasAk[id] == true && g_hasZoom[id])
{
g_hasZoom[ id ] = false
cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )

}

}
return PLUGIN_HANDLED
}


public make_tracer(id)
{
if (get_pcvar_num(cvar_goldbullets))
{
new clip,ammo
new wpnid = get_user_weapon(id,clip,ammo)
new pteam[16]

get_user_team(id, pteam, 15)

if ((bullets[id] > 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 CmdBuyAk(id)
{
if ( !is_user_alive(id) || !( get_user_flags(id) & ADMIN_LEVEL_G ))
{
//client_print(id,print_chat, "[CSDM] Что бы взять Ak 47 Vulcan вы должны быть живы!")
return PLUGIN_HANDLED
}

new money = cs_get_user_money(id)

if (money >= get_pcvar_num(cvar_cost))
{
cs_set_user_money(id, money - get_pcvar_num(cvar_cost))
give_item(id, "weapon_ak47")
cs_set_user_bpammo(id, CSW_AK47, 90)
g_HasAk[id] = true
}

else
{
client_print(id, print_chat, "[CSDM] Недостаточно средств. Цена $%d ", get_pcvar_num(cvar_cost))
}
return PLUGIN_HANDLED
}

public CmdGiveAk(id,level,cid)
{
if (!cmd_access(id,level,cid,2))
return PLUGIN_HANDLED;
new arg[32];
read_argv(1,arg,31);

new player = cmd_target(id,arg,7);
if (!player)
return PLUGIN_HANDLED;

new name[32];
get_user_name(player,name,31);

give_item(player, "weapon_ak47")
g_HasAk[player] = true

return PLUGIN_HANDLED
}

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)
}
}
}


Вот, по идее должно работать, сразу говорю, не тестил.
- выдается всем
- если дропнули золотой калаш, то и подберется золотой калаш
- при следующем раунде не пропадает
- зум пашет

Есть баг:
Если наступить на дропнутый золотой ак, то в этом раунде обычный калаш уже не купить, нужно ждать следующего раунда. Но думаю это не критично.

ну и модели заменить на свои тут:

Код:
new AK_V_MODEL[64] = "models/zm/v_ak47_vulcan.mdl"
new AK_P_MODEL[64] = "models/zm/p_ak47_vulcan.mdl"
new AK_W_MODEL[64] = "models/zm/w_ak47_vulcan.mdl"

и тут
Код:
if(equali(modelname, "models/zm/w_ak47_vulcan.mdl"))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
progamer
сообщение 22.2.2015, 18:38
Сообщение #24
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

Цитата(filip @ 21.2.2015, 21:37) *
Вот, по идее должно работать, сразу говорю, не тестил.
- выдается всем
- если дропнули золотой калаш, то и подберется золотой калаш
- при следующем раунде не пропадает
- зум пашет

Есть баг:
Если наступить на дропнутый золотой ак, то в этом раунде обычный калаш уже не купить, нужно ждать следующего раунда. Но думаю это не критично.

ну и модели заменить на свои тут:

Код:
new AK_V_MODEL[64] = "models/zm/v_ak47_vulcan.mdl"
new AK_P_MODEL[64] = "models/zm/p_ak47_vulcan.mdl"
new AK_W_MODEL[64] = "models/zm/w_ak47_vulcan.mdl"

и тут
Код:
if(equali(modelname, "models/zm/w_ak47_vulcan.mdl"))


Спасибо. Счас заценим твой вариант!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
progamer
сообщение 22.2.2015, 23:47
Сообщение #25
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

Установил твой плагин, действительно всё работает но есть интересный глюк.
Если ты бежишь с золотым калашом и на пути лежит обычный калаш,
то выбрасываешь золотой на пол и поднимаешь обычный, который в твоих руках
превращается в золотой - в итоге получилось 2 золотых калаша.
Короче любой кто бегает с золотым калашом и встречает на полу лежачие
обычные калаши, может их "позолотить" ))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 23.2.2015, 7:55
Сообщение #26


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

Код:
#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <amxmisc>
#include <engine>
#include <fakemeta_util>

#define is_valid_player(%1) (1 <= %1 <= 32)

new AK_V_MODEL[64] = "models/zm/v_ak47_vulcan.mdl"
new AK_P_MODEL[64] = "models/zm/p_ak47_vulcan.mdl"
new AK_W_MODEL[64] = "models/zm/w_ak47_vulcan.mdl"
/* Pcvars */
new cvar_dmgmultiplier, cvar_goldbullets, cvar_custommodel, cvar_uclip, cvar_cost

new bool:g_HasAk[33]

new g_hasZoom[ 33 ]
new bullets[ 33 ]

// Sprite
new m_spriteTexture

const Wep_ak47 = ((1<<CSW_AK47))

public plugin_init()
{

/* CVARS */
cvar_dmgmultiplier = register_cvar("goldenak_dmg_multiplier", "1")
cvar_custommodel = register_cvar("goldenak_custom_model", "1")
cvar_goldbullets = register_cvar("goldenak_gold_bullets", "0")
cvar_uclip = register_cvar("goldenak_unlimited_clip", "1")
cvar_cost = register_cvar("goldenak_cost", "0")

// Register The Buy Cmd
register_clcmd("say /goldenak", "CmdBuyAk")
register_clcmd("say_team /goldenak", "CmdBuyAk")
register_concmd("amx_goldenak", "CmdGiveAk", ADMIN_LEVEL_G, "<name>")

// Register The Plugin
register_plugin("Golden Ak 47", "1.0", "AlejandroSk")
// Death Msg
//register_event("DeathMsg", "Death", "a")
// Weapon Pick Up
register_event("WeapPickup","checkModel","b","1=19")
//Замена w_ модели
register_forward(FM_SetModel, "fw_SetModel")
// Current Weapon Event
register_event("CurWeapon","checkWeapon","be","1=1")
register_event("CurWeapon", "make_tracer", "be", "1=1", "3>0")
// Ham TakeDamage
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
//регистрируем соприкосновение с оружием (в руках)
RegisterHam(Ham_Touch, "armoury_entity", "fwdTouch")
//регистрируем соприкосновение с оружием, лежащим на земле (дропнули или убили игрока и оно выпало)
RegisterHam(Ham_Touch, "weaponbox", "fwdTouch")
register_forward( FM_CmdStart, "fw_CmdStart" )
//RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)
register_logevent("logevent_round_end", 2, "1=Round_End")
}

public client_connect(id)
{
g_HasAk[id] = false
}

public client_disconnect(id)
{
g_HasAk[id] = false
}
/*
public Death()
{
g_HasAk[read_data(2)] = false
}
*/
public logevent_round_end()
{

new players[32], num
get_players(players,num,"h")
for(new i=0;i<num;i++)
{
if( is_user_alive(players[i]) && g_HasAk[players[i]])
return PLUGIN_HANDLED
g_HasAk[players[i]] = false
}
return PLUGIN_HANDLED
}
/*
public fwHamPlayerSpawnPost(id)
{
g_HasAk[id] = false
}
*/
public plugin_precache()
{
precache_model(AK_V_MODEL)
precache_model(AK_P_MODEL)
precache_model(AK_W_MODEL)
m_spriteTexture = precache_model("sprites/dot.spr")
precache_sound("weapons/zoom.wav")
}
//Проверка модели в руках
public checkModel(id)
{
if ( !g_HasAk[id] )
return PLUGIN_HANDLED

new szWeapID = read_data(2)

if ( szWeapID == CSW_AK47 && g_HasAk[id] == true && get_pcvar_num(cvar_custommodel) )
{
set_pev(id, pev_viewmodel2, AK_V_MODEL)
set_pev(id, pev_weaponmodel2, AK_P_MODEL)
}
return PLUGIN_HANDLED
}

public checkWeapon(id)
{
new plrClip, plrAmmo, plrWeap[32]
new plrWeapId

plrWeapId = get_user_weapon(id, plrClip , plrAmmo)

if (plrWeapId == CSW_AK47 && g_HasAk[id])
{
checkModel(id)
}
else
{
return PLUGIN_CONTINUE
}

if (plrClip == 0 && get_pcvar_num(cvar_uclip))
{
// If the user is out of ammo..
get_weaponname(plrWeapId, plrWeap, 31)
// Get the name of their weapon
give_item(id, plrWeap)
engclient_cmd(id, plrWeap)
engclient_cmd(id, plrWeap)
engclient_cmd(id, plrWeap)
}
return PLUGIN_HANDLED
}
//эта функция оставляет модельку после того, когда игрока убили
public fw_SetModel(entity, model[])
{
if(!pev_valid(entity))
return FMRES_IGNORED

static szClassName[33]
pev(entity, pev_classname, szClassName, charsmax(szClassName))

if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED

static id
id = pev(entity, pev_owner)

if(equal(model, "models/w_ak47.mdl"))
{
static weapon
weapon = fm_find_ent_by_owner(-1, "weapon_ak47", entity)

if(!pev_valid(weapon))
return FMRES_IGNORED

if(g_HasAk[id])
{
set_pev(weapon, pev_impulse, 1942)
engfunc(EngFunc_SetModel, entity, AK_W_MODEL)

//g_HasAk[id] = false

return FMRES_SUPERCEDE
}
}

return FMRES_IGNORED
}

// Эта функция работает корректно (не выдает игрокам без флага s оружие, которое лежит на полу), но она не выводит оповещения
public fwdTouch( ent, id ) {
if( !is_valid_ent(ent) || !is_user_alive(id))
return HAM_IGNORED

new modelname[32]
entity_get_string(ent, EV_SZ_model, modelname, 31)
if(equali(modelname, "models/zm/w_ak47_vulcan.mdl") && !(get_user_weapon(id) == CSW_AK47))
{
//return HAM_SUPERCEDE
g_HasAk[id] = true
}
if(equali(modelname, "models/w_ak47.mdl") && !(get_user_weapon(id) == CSW_AK47))
g_HasAk[id] = false
return HAM_IGNORED
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CSW_AK47 && g_HasAk[attacker] )
{
SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmgmultiplier ) )
}
}

public fw_CmdStart( id, uc_handle, seed )
{
if( !is_user_alive( id ) )
return PLUGIN_HANDLED

if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
{
new szClip, szAmmo
new szWeapID = get_user_weapon( id, szClip, szAmmo )

if( szWeapID == CSW_AK47 && g_HasAk[id] == true && !g_hasZoom[id] == true)
{
g_hasZoom[id] = true
cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 0 )
emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
}

else if ( szWeapID == CSW_AK47 && g_HasAk[id] == true && g_hasZoom[id])
{
g_hasZoom[ id ] = false
cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )

}

}
return PLUGIN_HANDLED
}


public make_tracer(id)
{
if (get_pcvar_num(cvar_goldbullets))
{
new clip,ammo
new wpnid = get_user_weapon(id,clip,ammo)
new pteam[16]

get_user_team(id, pteam, 15)

if ((bullets[id] > 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 CmdBuyAk(id)
{
if ( !is_user_alive(id))
{
//client_print(id,print_chat, "[CSDM] Что бы взять Ak 47 Vulcan вы должны быть живы!")
return PLUGIN_HANDLED
}

new money = cs_get_user_money(id)

if (money >= get_pcvar_num(cvar_cost))
{
cs_set_user_money(id, money - get_pcvar_num(cvar_cost))
give_item(id, "weapon_ak47")
cs_set_user_bpammo(id, CSW_AK47, 90)
g_HasAk[id] = true
}

else
{
client_print(id, print_chat, "[CSDM] Недостаточно средств. Цена $%d ", get_pcvar_num(cvar_cost))
}
return PLUGIN_HANDLED
}

public CmdGiveAk(id,level,cid)
{
if (!cmd_access(id,level,cid,2))
return PLUGIN_HANDLED;
new arg[32];
read_argv(1,arg,31);

new player = cmd_target(id,arg,7);
if (!player)
return PLUGIN_HANDLED;

new name[32];
get_user_name(player,name,31);

give_item(player, "weapon_ak47")
g_HasAk[player] = true

return PLUGIN_HANDLED
}

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)
}
}
}


Но опять же баг. Имеем 2 калаша, золотой и обычный. В руках золотой, на земле обычный. Если стоя на обычном (касаясь его) выкинуть золотой, то поднимется золотой. Работает корректно, если сначала дропнуть золотой и потом поднять обычный и наоборот. Как этот момент устранить не в курсе dntknw.gif Нужно просить опытных людей.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
progamer
сообщение 23.2.2015, 15:51
Сообщение #27
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

Спасибо.

И ещё... В твоём плагине какой-то зум странный!!
Когда приближаешь - то внутри прицела видится ещё один маленький прицел.
Можешь перетянуть реализацию зума отсюда (исходник ниже).
В этом плагине прицел не двоится и нормально работает.

Код:
/* AMX Mod script
*
* © 2009, AlejandroSk
* This file is provided as is (no warranties).
*
*/

#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <amxmisc>


#define is_valid_player(%1) (1 <= %1 <= 32)

new AK_V_MODEL[64] = "models/v_golden_ak47.mdl"
new AK_P_MODEL[64] = "models/p_golden_ak47.mdl"

/* Pcvars */
new cvar_dmgmultiplier, cvar_goldbullets, cvar_custommodel, cvar_uclip, cvar_cost

new bool:g_HasAk[33]

new g_hasZoom[ 33 ]
new bullets[ 33 ]

// Sprite
new m_spriteTexture

const Wep_ak47 = ((1<<CSW_AK47))

public plugin_init()
{

/* CVARS */
cvar_dmgmultiplier = register_cvar("goldenak_dmg_multiplier", "2")
cvar_custommodel = register_cvar("goldenak_custom_model", "1")
cvar_goldbullets = register_cvar("goldenak_gold_bullets", "0")
cvar_uclip = register_cvar("goldenak_unlimited_clip", "1")
cvar_cost = register_cvar("goldenak_cost", "6000")

// Register The Buy Cmd
register_clcmd("say /goldenak", "CmdBuyAk")
register_clcmd("say_team /goldenak", "CmdBuyAk")
register_concmd("amx_goldenak", "CmdGiveAk", ADMIN_BAN, "<name>")

// Register The Plugin
register_plugin("Golden Ak 47", "1.0", "AlejandroSk")
// Death Msg
register_event("DeathMsg", "Death", "a")
// Weapon Pick Up
register_event("WeapPickup","checkModel","b","1=19")
// Current Weapon Event
register_event("CurWeapon","checkWeapon","be","1=1")
register_event("CurWeapon", "make_tracer", "be", "1=1", "3>0")
// Ham TakeDamage
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
register_forward( FM_CmdStart, "fw_CmdStart" )
RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)

}

public client_connect(id)
{
g_HasAk[id] = false
}

public client_disconnect(id)
{
g_HasAk[id] = false
}

public Death()
{
g_HasAk[read_data(2)] = false
}

public fwHamPlayerSpawnPost(id)
{
g_HasAk[id] = false
}

public plugin_precache()
{
precache_model(AK_V_MODEL)
precache_model(AK_P_MODEL)
m_spriteTexture = precache_model("sprites/dot.spr")
precache_sound("weapons/zoom.wav")
}

public checkModel(id)
{
if ( !g_HasAk[id] )
return PLUGIN_HANDLED

new szWeapID = read_data(2)

if ( szWeapID == CSW_AK47 && g_HasAk[id] == true && get_pcvar_num(cvar_custommodel) )
{
set_pev(id, pev_viewmodel2, AK_V_MODEL)
set_pev(id, pev_weaponmodel2, AK_P_MODEL)
}
return PLUGIN_HANDLED
}

public checkWeapon(id)
{
new plrClip, plrAmmo, plrWeap[32]
new plrWeapId

plrWeapId = get_user_weapon(id, plrClip , plrAmmo)

if (plrWeapId == CSW_AK47 && g_HasAk[id])
{
checkModel(id)
}
else
{
return PLUGIN_CONTINUE
}

if (plrClip == 0 && get_pcvar_num(cvar_uclip))
{
// If the user is out of ammo..
get_weaponname(plrWeapId, plrWeap, 31)
// Get the name of their weapon
give_item(id, plrWeap)
engclient_cmd(id, plrWeap)
engclient_cmd(id, plrWeap)
engclient_cmd(id, plrWeap)
}
return PLUGIN_HANDLED
}



public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CSW_AK47 && g_HasAk[attacker] )
{
SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmgmultiplier ) )
}
}

public fw_CmdStart( id, uc_handle, seed )
{
if( !is_user_alive( id ) )
return PLUGIN_HANDLED

if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
{
new szClip, szAmmo
new szWeapID = get_user_weapon( id, szClip, szAmmo )

if( szWeapID == CSW_AK47 && g_HasAk[id] == true && !g_hasZoom[id] == true)
{
g_hasZoom[id] = true
cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 0 )
emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
}

else if ( szWeapID == CSW_AK47 && g_HasAk[id] == true && g_hasZoom[id])
{
g_hasZoom[ id ] = false
cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )

}

}
return PLUGIN_HANDLED
}


public make_tracer(id)
{
if (get_pcvar_num(cvar_goldbullets))
{

new clip,ammo
new wpnid = get_user_weapon(id,clip,ammo)
new pteam[16]

get_user_team(id, pteam, 15)

if ((bullets[id] > 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 CmdBuyAk(id)
{
if ( !is_user_alive(id) )
{
client_print(id,print_chat, "Для покупки Golden AK-47 вы должны быть живы!")
return PLUGIN_HANDLED
}

new money = cs_get_user_money(id)

if (money >= get_pcvar_num(cvar_cost))
{
cs_set_user_money(id, money - get_pcvar_num(cvar_cost))
give_item(id, "weapon_ak47")
g_HasAk[id] = true
}

else
{
client_print(id, print_chat, "Не хватает денег для покупки Golden AK-47. Стоимость $%d ", get_pcvar_num(cvar_cost))
}
return PLUGIN_HANDLED
}

public CmdGiveAk(id,level,cid)
{
if (!cmd_access(id,level,cid,2))
return PLUGIN_HANDLED;
new arg[32];
read_argv(1,arg,31);

new player = cmd_target(id,arg,7);
if (!player)
return PLUGIN_HANDLED;

new name[32];
get_user_name(player,name,31);

give_item(player, "weapon_ak47")
g_HasAk[player] = true

return PLUGIN_HANDLED
}

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)
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
progamer
сообщение 24.2.2015, 0:01
Сообщение #28
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

Зум можешь приделать с плагина что я в прошлом посте выложил, чтобы устранить "двойной прицел".
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 24.2.2015, 6:42
Сообщение #29


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

Реализация зума что там что там одинаковая. Именно этот плагин я пытался переделать под твои нужды.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
progamer
сообщение 24.2.2015, 12:31
Сообщение #30
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

Цитата(filip @ 24.2.2015, 7:42) *
Реализация зума что там что там одинаковая. Именно этот плагин я пытался переделать под твои нужды.

Извини. В нем действительно тоже виден прицелв прицеле.
Вот нужный плагин, в этом прицела в прицеле - нет.
Можешь с него взять зум и прилепить в свой?

Код:

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <engine>
#include <xs>

#define CustomItem(%0) (entity_get_int(%0, EV_INT_impulse) == WEAPON_KEY)
#define get_bit(%1,%2) ((%1 & (1 << (%2 & 31))) ? true : false)
#define set_bit(%1,%2) %1 |= (1 << (%2 & 31))
#define reset_bit(%1,%2) %1 &= ~(1 << (%2 & 31))
#define IsConnected(%0) (1<=%0<=g_MaxPlayers && get_bit(g_connect, %0))

#define m_rgpPlayerItems_CWeaponBox 34
#define m_pPlayer 41
#define m_pNext 42
#define m_flNextSecondaryAttack 47
#define m_iShell 57
#define m_flNextAttack 83
#define m_flEjectBrass 111
#define m_rpgPlayerItems 367
#define m_rpgPlayerItems0 368
#define m_pActiveItem 373

#define WEAPON_KEY 4354
#define WEAPON_OLD "weapon_sg552"
#define WEAPON_NEW "weapon_akm_gold"
#define WEAPON_EVENT "events/sg552.sc"

new const WEAPON_SOUNDS[][] = {
"weapons/akm_clipin.wav",
"weapons/akm_clipout.wav",
"weapons/akm_draw.wav"
}
new const WEAPON_SPITES[][] = {
"sprites/akm/640hud7.spr",
"sprites/akm/640hud31.spr"
}

// - - - - - - - - - - МОДЕЛИ / - - - - - - - - - -
#define WEAPON_MODEL_V "models/akmg/v_gold_ak47.mdl"
#define WEAPON_MODEL_P "models/akmg/p_gold_ak47.mdl"
#define WEAPON_MODEL_W "models/akmg/w_gold_ak47.mdl"
#define WEAPON_MODEL_S "models/rshell.mdl"
#define WEAPON_SOUND_S "weapons/akm-1.wav"

// - - - - - - - - - - НАСТРОЙКИ / - - - - - - - - - -
#define WEAPON_RATE 0.09
#define WEAPON_DAMAGE 1.5
#define WEAPON_RECOIL 0.5
#define WEAPON_CLIP 30
#define WEAPON_AMMO 120

#define WEAPON_AKGOLD_COST 2000
#define WEAPON_AMMO_COST 200
// - - - - - - - - - - НАСТРОЙКИ / - - - - - - - - - -

new g_connect, g_MaxPlayers, g_shell, g_event, g_fw_index

public plugin_init() {
register_plugin("[Z]Weapon: AKM Gold (Scar)", "0.1", "batcon");
RegisterHam(Ham_Item_Deploy, WEAPON_OLD, "fw_Item_Deploy_Post", 1);
RegisterHam(Ham_Weapon_Reload, WEAPON_OLD, "fw_Weapon_Reload_Post", 1);
RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_OLD, "fw_Weapon_PrimaryAttack");
RegisterHam(Ham_Item_AddToPlayer, WEAPON_OLD, "fw_Item_AddToPlayer_Post", 1);

RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack");
RegisterHam(Ham_TraceAttack, "hostage_entity", "fw_TraceAttack");
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack");

RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack_Post", 1);
RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack_Post", 1);

RegisterHam(Ham_Spawn, "weaponbox", "fw_Spawn_Weaponbox_Post", 1);

unregister_forward(FM_PrecacheEvent, g_fw_index, 1);

register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1);
register_forward(FM_SetModel, "fw_SetModel");
register_forward(FM_PlaybackEvent, "fw_PlaybackEvent");

g_MaxPlayers = get_maxplayers();

state WeaponBox_Disabled;

register_clcmd(WEAPON_NEW, "hook_weapon");
register_clcmd("buyammo1", "clcmd_buyammo");
register_clcmd("say /buygoldak", "give_scar1");
register_clcmd("say_team /buygoldak", "give_scar1");

//register_clcmd("give_ak_test", "give_test");

}
public plugin_precache() {
static buffer[64], i;
engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_V);
engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_P);
engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_W);
g_shell = engfunc(EngFunc_PrecacheModel, WEAPON_MODEL_S);
engfunc(EngFunc_PrecacheSound, WEAPON_SOUND_S);
for(i = 0; i < sizeof WEAPON_SOUNDS;i++) engfunc(EngFunc_PrecacheSound, WEAPON_SOUNDS[i]);
for(i = 0; i < sizeof WEAPON_SPITES;i++) engfunc(EngFunc_PrecacheGeneric, WEAPON_SPITES[i]);
format(buffer, charsmax(buffer), "sprites/%s.txt", WEAPON_NEW);
engfunc(EngFunc_PrecacheGeneric, buffer);
g_fw_index = register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1);
}
public client_putinserver(id) set_bit(g_connect, id);
public client_disconnect(id) reset_bit(g_connect, id);
public hook_weapon(id) engclient_cmd(id, WEAPON_OLD);

/*public give_test(id) {
UTIL_DropWeapon(id, 1);
if(!give_weapon(id)) return;
emit_sound(id, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
static amount; amount = GetAmmoDifference(id, CSW_SG552, WEAPON_AMMO)
if(amount) {
AmmoPickup_Icon(id, 4, WEAPON_CLIP, amount);
cs_set_user_bpammo(id, CSW_SG552, WEAPON_AMMO);
}
}*/

public give_scar1(id) {
if(!is_user_alive(id)) return PLUGIN_HANDLED;

static money; money = cs_get_user_money(id);
if(WEAPON_AKGOLD_COST > money) {
client_print(id, print_center, "#Cstrike_TitlesTXT_Not_Enough_Money");
UTIL_BlinkAcct(id, 2);
return PLUGIN_HANDLED;
}

UTIL_DropWeapon(id, 1);
if(!give_weapon(id)) return PLUGIN_HANDLED;
emit_sound(id, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
static amount; amount = GetAmmoDifference(id, CSW_SG552, WEAPON_AMMO)
cs_set_user_money(id, money-WEAPON_AKGOLD_COST);
if(amount) {
AmmoPickup_Icon(id, 4, WEAPON_CLIP, amount);
cs_set_user_bpammo(id, CSW_SG552, WEAPON_AMMO);
}
return PLUGIN_HANDLED;
}
public give_weapon(id) {
new ent = create_entity(WEAPON_OLD);
if(!is_valid_ent(ent)) return false;
entity_set_int(ent, EV_INT_spawnflags, SF_NORESPAWN);
entity_set_int(ent, EV_INT_impulse, WEAPON_KEY);
ExecuteHam(Ham_Spawn, ent);
if(!ExecuteHamB(Ham_AddPlayerItem, id, ent)) {
entity_set_int(ent, EV_INT_flags, FL_KILLME);
return true;
}
ExecuteHamB(Ham_Item_AttachToPlayer, ent, id);
return true;
}
public fw_Item_Deploy_Post(ent) {
if(!CustomItem(ent)) return HAM_IGNORED;
static id; id = get_pdata_cbase(ent, m_pPlayer, 4);
entity_set_string(id, EV_SZ_viewmodel, WEAPON_MODEL_V);
entity_set_string(id, EV_SZ_weaponmodel, WEAPON_MODEL_P);
UTIL_PlayWeaponAnimation(id, 2); //Fix draw anim
set_pdata_float(id, m_flNextAttack, 1.1, 5);
return HAM_IGNORED;
}
public fw_Weapon_Reload_Post(ent) {
if(!CustomItem(ent)) return HAM_IGNORED;
set_pdata_float(get_pdata_cbase(ent, m_pPlayer, 4), m_flNextAttack, 2.9, 5);
return HAM_IGNORED;
}
public fw_Weapon_PrimaryAttack(ent) {
if(!CustomItem(ent) || !cs_get_weapon_ammo(ent)) return HAM_IGNORED;
ExecuteHam(Ham_Weapon_PrimaryAttack, ent);
static id; id = get_pdata_cbase(ent, m_pPlayer, 4);
emit_sound(id, CHAN_WEAPON, WEAPON_SOUND_S, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
UTIL_PlayWeaponAnimation(id, 3);
set_pdata_float(ent, m_flNextSecondaryAttack, WEAPON_RATE, 4);
static Float:Punchangle[3]; entity_get_vector(id, EV_VEC_punchangle, Punchangle);
xs_vec_mul_scalar(Punchangle, WEAPON_RECOIL, Punchangle);
entity_set_vector(id, EV_VEC_punchangle, Punchangle);
set_pdata_int(ent, m_iShell, g_shell, 4);
set_pdata_float(id, m_flEjectBrass, get_gametime(), 5);
return HAM_SUPERCEDE;
}
public fw_Item_AddToPlayer_Post(ent, id) {
switch(entity_get_int(ent, EV_INT_impulse)) {
case 0: UTIL_Weaponlist(id, WEAPON_OLD, 2, 90, 0, 1, CSW_SG552, 0);
case WEAPON_KEY: UTIL_Weaponlist(id, WEAPON_NEW, 2, WEAPON_AMMO, 0, 1, CSW_SG552, 0);
}
}
public fw_TraceAttack(entity, attacker, Float:damage) {
if(!IsConnected(attacker) || !CustomItem(get_pdata_cbase(attacker, m_pActiveItem, 5))) return HAM_IGNORED;
SetHamParamFloat(3, damage * WEAPON_DAMAGE);
return HAM_IGNORED;
}
public fw_TraceAttack_Post(entity, attacker, Float:damage, Float:fDir[3], ptr, damagetype) {
if(!CustomItem(get_pdata_cbase(attacker, m_pActiveItem, 5))) return HAM_IGNORED;
static Float:vecEnd[3]; get_tr2(ptr, TR_vecEndPos, vecEnd);
engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0);
write_byte(TE_GUNSHOTDECAL);
engfunc(EngFunc_WriteCoord, vecEnd[0]);
engfunc(EngFunc_WriteCoord, vecEnd[1]);
engfunc(EngFunc_WriteCoord, vecEnd[2]);
write_short(entity);
write_byte(random_num(41, 45));
message_end();
return HAM_IGNORED;
}
public fw_Spawn_Weaponbox_Post(ent) {
if(is_valid_ent(ent))
state (is_valid_ent(entity_get_edict(ent, EV_ENT_owner))) WeaponBox_Enabled;
}
public fw_UpdateClientData_Post(id, SendWeapons, CD_Handle) {
if(!is_user_alive(id) || !CustomItem(get_pdata_cbase(id, m_pActiveItem, 5))) return FMRES_IGNORED;
set_cd(CD_Handle, CD_flNextAttack, 999999.0);
return FMRES_HANDLED;
}
public fw_SetModel(entity) <WeaponBox_Enabled>
{
state WeaponBox_Disabled;
if(!is_valid_ent(entity)) return FMRES_IGNORED;

static i;
for(i = 0; i < 6; i++) {
static item; item = get_pdata_cbase(entity, m_rgpPlayerItems_CWeaponBox + i, 4);
if(is_valid_ent(item) && CustomItem(item)) {
entity_set_model(entity, WEAPON_MODEL_W);
return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
}
public fw_SetModel() <WeaponBox_Disabled>
{
return FMRES_IGNORED;
}
public clcmd_buyammo(id) {
if(!is_user_alive(id) || !cs_get_user_buyzone(id)) return PLUGIN_CONTINUE;
static weapon; weapon = get_pdata_cbase(id, m_rpgPlayerItems0, 5);
if(!is_valid_ent(weapon) || !CustomItem(weapon)) return PLUGIN_CONTINUE;
static ammo; ammo = cs_get_user_bpammo(id, CSW_SG552);
if(ammo >= WEAPON_AMMO) return PLUGIN_HANDLED;
static money; money = cs_get_user_money(id);
if(WEAPON_AMMO_COST > money) {
client_print(id, print_center, "#Cstrike_TitlesTXT_Not_Enough_Money");
UTIL_BlinkAcct(id, 2);
return PLUGIN_HANDLED;
}
static amount; amount = min(WEAPON_CLIP, WEAPON_AMMO-ammo);
UTIL_AmmoPickup(id, 4, amount);
cs_set_user_bpammo(id, CSW_SG552, ammo+amount);
cs_set_user_money(id, money-WEAPON_AMMO_COST);
emit_sound(id, CHAN_ITEM, "items/9mmclip1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
return PLUGIN_HANDLED;
}
public fw_PrecacheEvent_Post(type, name[]) {
if(equal(WEAPON_EVENT, name)) {
g_event = get_orig_retval();
return FMRES_HANDLED;
}
return FMRES_IGNORED;
}
public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:iangles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) {
if(eventid != g_event || !IsConnected(invoker)) return FMRES_IGNORED;
playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, iangles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2);
return FMRES_SUPERCEDE;
}
stock UTIL_PlayWeaponAnimation(id, Sequence) {
entity_set_int(id, EV_INT_weaponanim, Sequence);
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id);
write_byte(Sequence);
write_byte(0);
message_end();
}
stock UTIL_DropWeapon(id, slot) {
if(!(1 <= slot <= 2)) return 0;
static iCount; iCount = 0;
static iEntity; iEntity = get_pdata_cbase(id, (m_rpgPlayerItems + slot), 5);
if(iEntity > 0) {
static iNext;
static szWeaponName[32];

do{
iNext = get_pdata_cbase(iEntity, m_pNext, 4);
if(get_weaponname(cs_get_weapon_id(iEntity), szWeaponName, charsmax(szWeaponName))) {
engclient_cmd(id, "drop", szWeaponName);
iCount++;
}
} while(( iEntity = iNext) > 0);
}
return iCount;
}
stock UTIL_Weaponlist(id, weaponlist[], int, int2, int3, int4, int5, int6) {
static msg_WeaponList; if(!msg_WeaponList) msg_WeaponList = get_user_msgid("WeaponList");
message_begin(MSG_ONE, msg_WeaponList, _, id);
write_string(weaponlist);
write_byte(int);
write_byte(int2);
write_byte(-1);
write_byte(-1);
write_byte(int3);
write_byte(int4);
write_byte(int5);
write_byte(int6);
message_end();
}
stock UTIL_AmmoPickup(id, AmmoID, Amount) {
static msg_AmmoPickup; if(!msg_AmmoPickup) msg_AmmoPickup = get_user_msgid("AmmoPickup");
message_begin(MSG_ONE_UNRELIABLE, msg_AmmoPickup, _, id);
write_byte(AmmoID);
write_byte(Amount);
message_end();
}
stock UTIL_BlinkAcct(id, BlinkAmt) {
static msg_BlinkAcct; if(!msg_BlinkAcct) msg_BlinkAcct = get_user_msgid("BlinkAcct");
message_begin(MSG_ONE_UNRELIABLE, msg_BlinkAcct, _, id);
write_byte(BlinkAmt);
message_end();
}
stock AmmoPickup_Icon(id, AmmoID, Clip, Amount) {
static i, count; count = floatround(Amount*1.0/Clip, floatround_floor);
static AmountAmmo; AmountAmmo = 0;
for(i=0;i<count;i++) {
UTIL_AmmoPickup(id, AmmoID, Clip);
AmountAmmo+=Clip;
}
static RestAmmo; RestAmmo = Amount-AmountAmmo;
if(RestAmmo) UTIL_AmmoPickup(id, AmmoID, RestAmmo);
}
stock GetAmmoDifference(id, csw, amount) {
static ammo; ammo = cs_get_user_bpammo(id, csw);
if(ammo >= amount) return 0;
return amount-ammo;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ ansicpg1251\\ deff0\\ deflang1049{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par }
*/
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 24.2.2015, 14:01
Сообщение #31


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

Цитата(progamer)
Вот нужный плагин, в этом прицела в прицеле - нет.
Можешь с него взять зум и прилепить в свой?

Я конечно могу ошибаться, но он сделан на основе SG552, а у этой пушки зум предусмотрен изначально движком, так что кода там нет такого.
Вот, воспользуйся советом:
Цитата(samthugg @ 12.2.2015, 2:01) *
Значит по всему тексту
CSW_AK47 >> CSW_SG552

В начале
WEAPON_OLD "weapon_ak47" >> WEAPON_OLD "weapon_sg552"
#define WEAPON_EVENT "events/ak47.sc" >> #define WEAPON_EVENT "events/sg552.sc"

Поменяй это в том коде, что я дал и попутно выпили оттуда это
Код:
public fw_CmdStart( id, uc_handle, seed )
{
if( !is_user_alive( id ) )
return PLUGIN_HANDLED

if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
{
new szClip, szAmmo
new szWeapID = get_user_weapon( id, szClip, szAmmo )

if( szWeapID == CSW_AK47 && g_HasAk[id] == true && !g_hasZoom[id] == true)
{
g_hasZoom[id] = true
cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 0 )
emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
}

else if ( szWeapID == CSW_AK47 && g_HasAk[id] == true && g_hasZoom[id])
{
g_hasZoom[ id ] = false
cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )

}

}
return PLUGIN_HANDLED
}
*/


и это
Код:
register_forward( FM_CmdStart, "fw_CmdStart" )

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
progamer
сообщение 24.2.2015, 15:56
Сообщение #32
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

Замена CSW_AK47 >> CSW_SG552 плохой вариант, поскольку ввеху экрана при киле рисуется значёк SG552 и в таблицу килов пишется убийство не с АК-47, а с SG552.

Мне нужно чтобы золотой АК считался как АК, но только не было двойного прицела.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
progamer
сообщение 24.2.2015, 23:50
Сообщение #33
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

Цитата(filip @ 23.2.2015, 7:55) *
Код:
#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <amxmisc>
#include <engine>
#include <fakemeta_util>

#define is_valid_player(%1) (1 <= %1 <= 32)

new AK_V_MODEL[64] = "models/zm/v_ak47_vulcan.mdl"
new AK_P_MODEL[64] = "models/zm/p_ak47_vulcan.mdl"
new AK_W_MODEL[64] = "models/zm/w_ak47_vulcan.mdl"
/* Pcvars */
new cvar_dmgmultiplier, cvar_goldbullets, cvar_custommodel, cvar_uclip, cvar_cost

new bool:g_HasAk[33]

new g_hasZoom[ 33 ]
new bullets[ 33 ]

// Sprite
new m_spriteTexture

const Wep_ak47 = ((1<<CSW_AK47))

public plugin_init()
{

/* CVARS */
cvar_dmgmultiplier = register_cvar("goldenak_dmg_multiplier", "1")
cvar_custommodel = register_cvar("goldenak_custom_model", "1")
cvar_goldbullets = register_cvar("goldenak_gold_bullets", "0")
cvar_uclip = register_cvar("goldenak_unlimited_clip", "1")
cvar_cost = register_cvar("goldenak_cost", "0")

// Register The Buy Cmd
register_clcmd("say /goldenak", "CmdBuyAk")
register_clcmd("say_team /goldenak", "CmdBuyAk")
register_concmd("amx_goldenak", "CmdGiveAk", ADMIN_LEVEL_G, "<name>")

// Register The Plugin
register_plugin("Golden Ak 47", "1.0", "AlejandroSk")
// Death Msg
//register_event("DeathMsg", "Death", "a")
// Weapon Pick Up
register_event("WeapPickup","checkModel","b","1=19")
//Замена w_ модели
register_forward(FM_SetModel, "fw_SetModel")
// Current Weapon Event
register_event("CurWeapon","checkWeapon","be","1=1")
register_event("CurWeapon", "make_tracer", "be", "1=1", "3>0")
// Ham TakeDamage
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
//регистрируем соприкосновение с оружием (в руках)
RegisterHam(Ham_Touch, "armoury_entity", "fwdTouch")
//регистрируем соприкосновение с оружием, лежащим на земле (дропнули или убили игрока и оно выпало)
RegisterHam(Ham_Touch, "weaponbox", "fwdTouch")
register_forward( FM_CmdStart, "fw_CmdStart" )
//RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)
register_logevent("logevent_round_end", 2, "1=Round_End")
}

public client_connect(id)
{
g_HasAk[id] = false
}

public client_disconnect(id)
{
g_HasAk[id] = false
}
/*
public Death()
{
g_HasAk[read_data(2)] = false
}
*/
public logevent_round_end()
{

new players[32], num
get_players(players,num,"h")
for(new i=0;i<num;i++)
{
if( is_user_alive(players[i]) && g_HasAk[players[i]])
return PLUGIN_HANDLED
g_HasAk[players[i]] = false
}
return PLUGIN_HANDLED
}
/*
public fwHamPlayerSpawnPost(id)
{
g_HasAk[id] = false
}
*/
public plugin_precache()
{
precache_model(AK_V_MODEL)
precache_model(AK_P_MODEL)
precache_model(AK_W_MODEL)
m_spriteTexture = precache_model("sprites/dot.spr")
precache_sound("weapons/zoom.wav")
}
//Проверка модели в руках
public checkModel(id)
{
if ( !g_HasAk[id] )
return PLUGIN_HANDLED

new szWeapID = read_data(2)

if ( szWeapID == CSW_AK47 && g_HasAk[id] == true && get_pcvar_num(cvar_custommodel) )
{
set_pev(id, pev_viewmodel2, AK_V_MODEL)
set_pev(id, pev_weaponmodel2, AK_P_MODEL)
}
return PLUGIN_HANDLED
}

public checkWeapon(id)
{
new plrClip, plrAmmo, plrWeap[32]
new plrWeapId

plrWeapId = get_user_weapon(id, plrClip , plrAmmo)

if (plrWeapId == CSW_AK47 && g_HasAk[id])
{
checkModel(id)
}
else
{
return PLUGIN_CONTINUE
}

if (plrClip == 0 && get_pcvar_num(cvar_uclip))
{
// If the user is out of ammo..
get_weaponname(plrWeapId, plrWeap, 31)
// Get the name of their weapon
give_item(id, plrWeap)
engclient_cmd(id, plrWeap)
engclient_cmd(id, plrWeap)
engclient_cmd(id, plrWeap)
}
return PLUGIN_HANDLED
}
//эта функция оставляет модельку после того, когда игрока убили
public fw_SetModel(entity, model[])
{
if(!pev_valid(entity))
return FMRES_IGNORED

static szClassName[33]
pev(entity, pev_classname, szClassName, charsmax(szClassName))

if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED

static id
id = pev(entity, pev_owner)

if(equal(model, "models/w_ak47.mdl"))
{
static weapon
weapon = fm_find_ent_by_owner(-1, "weapon_ak47", entity)

if(!pev_valid(weapon))
return FMRES_IGNORED

if(g_HasAk[id])
{
set_pev(weapon, pev_impulse, 1942)
engfunc(EngFunc_SetModel, entity, AK_W_MODEL)

//g_HasAk[id] = false

return FMRES_SUPERCEDE
}
}

return FMRES_IGNORED
}

// Эта функция работает корректно (не выдает игрокам без флага s оружие, которое лежит на полу), но она не выводит оповещения
public fwdTouch( ent, id ) {
if( !is_valid_ent(ent) || !is_user_alive(id))
return HAM_IGNORED

new modelname[32]
entity_get_string(ent, EV_SZ_model, modelname, 31)
if(equali(modelname, "models/zm/w_ak47_vulcan.mdl") && !(get_user_weapon(id) == CSW_AK47))
{
//return HAM_SUPERCEDE
g_HasAk[id] = true
}
if(equali(modelname, "models/w_ak47.mdl") && !(get_user_weapon(id) == CSW_AK47))
g_HasAk[id] = false
return HAM_IGNORED
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CSW_AK47 && g_HasAk[attacker] )
{
SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmgmultiplier ) )
}
}

public fw_CmdStart( id, uc_handle, seed )
{
if( !is_user_alive( id ) )
return PLUGIN_HANDLED

if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
{
new szClip, szAmmo
new szWeapID = get_user_weapon( id, szClip, szAmmo )

if( szWeapID == CSW_AK47 && g_HasAk[id] == true && !g_hasZoom[id] == true)
{
g_hasZoom[id] = true
cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 0 )
emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
}

else if ( szWeapID == CSW_AK47 && g_HasAk[id] == true && g_hasZoom[id])
{
g_hasZoom[ id ] = false
cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )

}

}
return PLUGIN_HANDLED
}


public make_tracer(id)
{
if (get_pcvar_num(cvar_goldbullets))
{
new clip,ammo
new wpnid = get_user_weapon(id,clip,ammo)
new pteam[16]

get_user_team(id, pteam, 15)

if ((bullets[id] > 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 CmdBuyAk(id)
{
if ( !is_user_alive(id))
{
//client_print(id,print_chat, "[CSDM] Что бы взять Ak 47 Vulcan вы должны быть живы!")
return PLUGIN_HANDLED
}

new money = cs_get_user_money(id)

if (money >= get_pcvar_num(cvar_cost))
{
cs_set_user_money(id, money - get_pcvar_num(cvar_cost))
give_item(id, "weapon_ak47")
cs_set_user_bpammo(id, CSW_AK47, 90)
g_HasAk[id] = true
}

else
{
client_print(id, print_chat, "[CSDM] Недостаточно средств. Цена $%d ", get_pcvar_num(cvar_cost))
}
return PLUGIN_HANDLED
}

public CmdGiveAk(id,level,cid)
{
if (!cmd_access(id,level,cid,2))
return PLUGIN_HANDLED;
new arg[32];
read_argv(1,arg,31);

new player = cmd_target(id,arg,7);
if (!player)
return PLUGIN_HANDLED;

new name[32];
get_user_name(player,name,31);

give_item(player, "weapon_ak47")
g_HasAk[player] = true

return PLUGIN_HANDLED
}

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)
}
}
}


Но опять же баг. Имеем 2 калаша, золотой и обычный. В руках золотой, на земле обычный. Если стоя на обычном (касаясь его) выкинуть золотой, то поднимется золотой. Работает корректно, если сначала дропнуть золотой и потом поднять обычный и наоборот. Как этот момент устранить не в курсе dntknw.gif Нужно просить опытных людей.



Пишу отзыв относительно твоей последней версии.
Поскольку тут уже куча версий, поэтому цитирую весь длинный пост, включая исходник.
Модератор, не надо вырезать исходник иначе не будет понятно про что я пишу.
Короче то что в исходнике тоже глючит.
1. Бежишь в руках с обычным АК, перед тобой лежит залотой, наступил на него,
выбросил обычный, но поднялся не золотой а обычный
2. Иногда покупаешь обычный калаш, а покупается золотой
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 25.2.2015, 11:50
Сообщение #34


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

Я не могу тебе помочь. В таких случаях легче найти подкованного человека и за небольшую плату получить корректно работающий плагин.

Отредактировал: filip, - 25.2.2015, 11:51
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
progamer
сообщение 25.2.2015, 12:57
Сообщение #35
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

Цитата(filip @ 25.2.2015, 12:50) *
Я не могу тебе помочь. В таких случаях легче найти подкованного человека и за небольшую плату получить корректно работающий плагин.


Ещё есть плагин голденак со сборки миррора - он вроде как самым нормальным считается.
Можешь помочь в нём изменить способ покупки оружия. Там сделано через меню, а надо через команду в чат.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 25.2.2015, 17:25
Сообщение #36


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

https://c-s.net.ua/forum/topic71222.html?vi...st&p=736958
Этот? По-моему это тот же плагин, который я тебе ковырял
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
progamer
сообщение 25.2.2015, 23:29
Сообщение #37
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

Цитата(filip @ 25.2.2015, 17:25) *
https://c-s.net.ua/forum/topic71222.html?vi...st&p=736958
Этот? По-моему это тот же плагин, который я тебе ковырял


Нет, это не тот. Я речь веду про нормальный плагин, но он работает только через закупку. сделанную через другой плагин с менюхой закупки золотого оружия.
Нужно сделать чтобы он работал самодостаточно, то есть через команду в чат say /goldenak.
Вот исходник:
Код:

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <war3ft_natives.inc>

new const g_item_name[] = {"Золотой АК-47"}
#define is_valid_player(%1) (1 <= %1 <= 32)

new AK_V_MODEL[] = "models/wc3_Shop/golden_ak47/v_golden_ak47.mdl"
new AK_P_MODEL[] = "models/wc3_Shop/golden_ak47/p_golden_ak47.mdl"
new AK_W_MODEL[] = "models/wc3_Shop/golden_ak47/w_golden_ak47.mdl"

#define XO_WEAPON 4
#define XO_PLAYER 5
#define m_rgpPlayerItems_CWeaponBox 34
#define m_pNext 42
#define m_iId 43
#define m_rgpPlayerItems_CBasePlayer 367

new cvar_dmgmultiplier

new bool:g_HasAk[33], bool:g_bHasGA[33]

new g_itemid_ak47
new iCvarItemCost,iCvarOnOffItem

#define WK 3333

public plugin_precache()
{
precache_model(AK_V_MODEL);
precache_model(AK_P_MODEL);
precache_model(AK_W_MODEL);
}

public plugin_init()
{
cvar_dmgmultiplier = register_cvar("goldenak_dmg_multiplier", "2")
iCvarItemCost = register_cvar("wc3_ak47_cost", "4500");
iCvarOnOffItem = register_cvar("wc3_ak47_on_off", "1");
g_itemid_ak47 = wc3_register_extra_item(g_item_name,get_pcvar_num(iCvarItemCost),iCvarOnOffItem,
1);
register_concmd("amx_giveak47", "give_ak47", ADMIN_RCON, "<name/id>");

register_plugin("Golden Ak 47", "1.0", "AlejandroSk")
register_event("DeathMsg", "Death", "a")
register_event("WeapPickup","checkModel","b","1=19")
register_event("CurWeapon","checkWeapon","be","1=1")

RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
register_forward(FM_SetModel, "fw_SetModel")
RegisterHam ( Ham_Item_AttachToPlayer, "weapon_ak47", "fw_Item_AttachToPlayer" )
register_event ( "HLTV", "ev_RoundStart", "a", "1=0", "2=0" )
}

public ev_RoundStart ()
{
new iPlayers[32], iNum
get_players ( iPlayers, iNum )

for ( --iNum; iNum >= 0; --iNum )
g_bHasGA[iPlayers[iNum]] = false
}

public plugin_natives ()
register_native ( "buy_ak", "native_buy_ak" )

public native_buy_ak ( plugin_id, num_params )
{
new id = get_param ( 1 )

if ( !is_user_connected ( id ) )
return false

giveak47(id)
return true
}

public client_connect(id)
{
g_HasAk[id] = false
g_bHasGA[id] = false
}

public client_disconnect(id)
{
g_HasAk[id] = false
g_bHasGA[id] = false
}

public Death()
{
g_HasAk[read_data(2)] = false
g_bHasGA[read_data(2)] = false
}



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

#define MAX_ITEM_TYPES 6

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) == WK )
{
g_HasAk[id] = false
engfunc ( EngFunc_SetModel, ent, AK_W_MODEL )
return FMRES_SUPERCEDE
}
}

return FMRES_IGNORED
}


public fw_Item_AttachToPlayer ( ent, id )
{
if ( pev_valid ( ent ) !=2 || !is_user_alive ( id ) )
return HAM_IGNORED

if ( pev ( ent, pev_impulse ) == WK )
g_HasAk[id] = true

return HAM_IGNORED
}

public checkModel(id)
{
if ( !g_HasAk[id] )
return PLUGIN_HANDLED

new szWeapID = read_data(2)

if ( szWeapID == CSW_AK47 && g_HasAk[id] == true )
{
set_pev(id, pev_viewmodel2, AK_V_MODEL)
set_pev(id, pev_weaponmodel2, AK_P_MODEL)
}
return PLUGIN_HANDLED
}

public wc3_extra_item_selected(id, itemid)
if (itemid == g_itemid_ak47 && is_user_alive(id))
giveak47(id)

public giveak47(id)
{
Player_DropWeapons ( id, 1 )
new iWeapon = give_item(id, "weapon_ak47")
set_pev(iWeapon, pev_impulse, WK)
g_HasAk[id] = true
}

public give_ak47(id, level, cid)
{
if(!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED

new arg[32]; read_argv(1, arg, 31)
new player = cmd_target(id, arg, 7)
if(!player)
{
console_print(id, "[Minigun] Give Minigun Failed")
return PLUGIN_HANDLED
}
giveak47(player)
return PLUGIN_CONTINUE
}

public checkWeapon(id)
{
new plrClip, plrAmmo
new plrWeapId

plrWeapId = get_user_weapon(id, plrClip , plrAmmo)

if (plrWeapId == CSW_AK47 && g_HasAk[id])
checkModel(id)
else
return PLUGIN_CONTINUE

return PLUGIN_HANDLED
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CSW_AK47 && g_HasAk[attacker] )
{
SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmgmultiplier ) )
}
}

Player_DropWeapons(const iPlayer, const iSlot)
{
new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, m_rgpPlayerItems_CBasePlayer + iSlot, XO_PLAYER);

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);
}
}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 26.2.2015, 11:22
Сообщение #38


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <fun>
#include <hamsandwich>

new const g_item_name[] = {"Золотой АК-47"}
#define is_valid_player(%1) (1 <= %1 <= 32)

new AK_V_MODEL[] = "models/wc3_Shop/golden_ak47/v_golden_ak47.mdl"
new AK_P_MODEL[] = "models/wc3_Shop/golden_ak47/p_golden_ak47.mdl"
new AK_W_MODEL[] = "models/wc3_Shop/golden_ak47/w_golden_ak47.mdl"

#define XO_WEAPON 4
#define XO_PLAYER 5
#define m_rgpPlayerItems_CWeaponBox 34
#define m_pNext 42
#define m_iId 43
#define m_rgpPlayerItems_CBasePlayer 367

new cvar_dmgmultiplier

new bool:g_HasAk[33], bool:g_bHasGA[33]

new iCvarItemCost, iCvarOnOffItem

#define WK 3333

public plugin_precache()
{
precache_model(AK_V_MODEL);
precache_model(AK_P_MODEL);
precache_model(AK_W_MODEL);
}

public plugin_init()
{
cvar_dmgmultiplier = register_cvar("goldenak_dmg_multiplier", "2")
iCvarItemCost = register_cvar("wc3_ak47_cost", "4500");
iCvarOnOffItem = register_cvar("wc3_ak47_on_off", "1");

register_concmd("amx_giveak47", "give_ak47", ADMIN_RCON, "<name/id>");

register_plugin("Golden Ak 47", "1.0", "AlejandroSk")
register_event("DeathMsg", "Death", "a")
register_event("WeapPickup","checkModel","b","1=19")
register_event("CurWeapon","checkWeapon","be","1=1")

RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
register_forward(FM_SetModel, "fw_SetModel")
RegisterHam ( Ham_Item_AttachToPlayer, "weapon_ak47", "fw_Item_AttachToPlayer" )
register_event ( "HLTV", "ev_RoundStart", "a", "1=0", "2=0" )
register_clcmd("say /goldenak", "giveak47")
}

public ev_RoundStart ()
{
new iPlayers[32], iNum
get_players ( iPlayers, iNum )

for ( --iNum; iNum >= 0; --iNum )
g_bHasGA[iPlayers[iNum]] = false
}
/*
public plugin_natives ()
register_native ( "buy_ak", "native_buy_ak" )

public native_buy_ak ( plugin_id, num_params )
{
new id = get_param ( 1 )

if ( !is_user_connected ( id ) )
return false

giveak47(id)
return true
}
*/
public client_connect(id)
{
g_HasAk[id] = false
g_bHasGA[id] = false
}

public client_disconnect(id)
{
g_HasAk[id] = false
g_bHasGA[id] = false
}

public Death()
{
g_HasAk[read_data(2)] = false
g_bHasGA[read_data(2)] = false
}



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

#define MAX_ITEM_TYPES 6

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) == WK )
{
g_HasAk[id] = false
engfunc ( EngFunc_SetModel, ent, AK_W_MODEL )
return FMRES_SUPERCEDE
}
}

return FMRES_IGNORED
}


public fw_Item_AttachToPlayer ( ent, id )
{
if ( pev_valid ( ent ) !=2 || !is_user_alive ( id ) )
return HAM_IGNORED

if ( pev ( ent, pev_impulse ) == WK )
g_HasAk[id] = true

return HAM_IGNORED
}

public checkModel(id)
{
if ( !g_HasAk[id] )
return PLUGIN_HANDLED

new szWeapID = read_data(2)

if ( szWeapID == CSW_AK47 && g_HasAk[id] == true )
{
set_pev(id, pev_viewmodel2, AK_V_MODEL)
set_pev(id, pev_weaponmodel2, AK_P_MODEL)
}
return PLUGIN_HANDLED
}

public giveak47(id)
{
Player_DropWeapons ( id, 1 )
new iWeapon = give_item(id, "weapon_ak47")
set_pev(iWeapon, pev_impulse, WK)
g_HasAk[id] = true
}

public give_ak47(id, level, cid)
{
if(!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED

new arg[32]; read_argv(1, arg, 31)
new player = cmd_target(id, arg, 7)
if(!player)
{
console_print(id, "[Minigun] Give Minigun Failed")
return PLUGIN_HANDLED
}
giveak47(player)
return PLUGIN_CONTINUE
}

public checkWeapon(id)
{
new plrClip, plrAmmo
new plrWeapId

plrWeapId = get_user_weapon(id, plrClip , plrAmmo)

if (plrWeapId == CSW_AK47 && g_HasAk[id])
checkModel(id)
else
return PLUGIN_CONTINUE

return PLUGIN_HANDLED
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CSW_AK47 && g_HasAk[attacker] )
{
SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmgmultiplier ) )
}
}

Player_DropWeapons(const iPlayer, const iSlot)
{
new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, m_rgpPlayerItems_CBasePlayer + iSlot, XO_PLAYER);

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);
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
progamer
сообщение 26.2.2015, 17:32
Сообщение #39
Стаж: 11 лет

Сообщений: 352
Благодарностей: 23
Полезность: < 0

Работает Отлично!!
В этом варианте плагина есть все модельки, включая дропнутую на полу.
Самое важное, что они правильно выдаются. То есть можно передать друг-другу и обычный калаш и золотой.
Короче самая сложная часть по взаимодействию моделек здесь реализована правильно.


Берём эту версию за основу! И теперь нужно добавить 2 мелочи:
1. Нужно чтобы при закупке снимались деньги.
Переменная iCvarItemCost есть но она нигде не используется. В итоге калаш бесплатный
2. Нужно к нему зум прикрутить, взятый из любого предыдущего плагина.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 26.2.2015, 18:12
Сообщение #40


Стаж: 13 лет

Сообщений: 418
Благодарностей: 332
Полезность: 779

добавь куда-нибудь в плагин это:
Код:
public fw_CmdStart( id, uc_handle, seed )
{
if( !is_user_alive( id ) )
return PLUGIN_HANDLED

if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
{
new szClip, szAmmo
new szWeapID = get_user_weapon( id, szClip, szAmmo )

if( szWeapID == CSW_AK47 && g_HasAk[id] == true && !g_hasZoom[id] == true)
{
g_hasZoom[id] = true
cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 0 )
emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
}

else if ( szWeapID == CSW_AK47 && g_HasAk[id] == true && g_hasZoom[id])
{
g_hasZoom[ id ] = false
cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )

}

}
return PLUGIN_HANDLED
}


Эту строчку добавь в plugin init
Код:
register_forward( FM_CmdStart, "fw_CmdStart" )

И зум должен заработать

Отредактировал: filip, - 26.2.2015, 18:13
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
3 страниц V   1 2 3
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: