Цитата(Legenda @ 30.6.2015, 15:01)

скорее всего SetSpeedGravity два раза вызывается
ищи ошибку выше
Увы, нет там больше обращений к SetSpeedGravity
Цитата(Legenda @ 30.6.2015, 15:01)

либо проблема с PrintChatColor
нет, client_print тоже 2 раза выводит сообщение
Цитата(Legenda @ 30.6.2015, 15:01)

плохая идея,
ЕМНИП если уже проигрывается звук - нельзя запускать проигрывание другого звука, пока проигрывание 1-ого файла не закончится
не понял, можно поподробнее?
Цитата(Safety1st @ 30.6.2015, 15:13)

filip, никакие
HAM_SUPERCEDE в Post'е не имеют смысла: функция уже вызвалась, её невозможно заблокировать

Цитата(Legenda @ 30.6.2015, 15:01)

return HAM_SUPERCEDE лучше убрать
Да да, его и не было в рабочей версии плагина, это я от безысходности экспериментировал)
Цитата(Safety1st @ 30.6.2015, 15:13)

После халявы ребятам с ADMIN_LEVEL_H поставь return HAM_IGNORED.
Увы, это не решило проблему
Цитата(Legenda @ 30.6.2015, 15:01)

ps лучше кидай весь код
Каюсь, вот он
Код:
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <WPMGPrintChatColor>
#include <fun>
#define VIP_DAMAGE 1.5 //урон наносимый вип игроком 1 - стандартный урон, 1.5 - увеличен на 50%
#define VIP_SPEED 480.0 //Стандартная скорость игрока 450 юнитов/мин, это ДОБАВКА к стандартной скорости, тип данных float (дробное число)
#define VIP_GRAVITY 0.7 //Гравитация 1 - стандартная, 1.5 - увеличена на 50%
#define VIP_DIFFERENCE 1 //разница между фрагами и смертями, при достижении которой будет выдаваться вип обычному игроку (в рекламных целях)
#define COUNT 7 //сколько раз за карту обычому игроку будут выдаваться вип возможности при достижении разницы между смертями и фрагами (выдается при каждомвозрождении)
#define FFADE_IN 0x0000 //это не трогать, это для тряски экрана
new g_ability[33]
new g_count[33]
new g_msgFade, g_msgShake
const VIP_FLAG = ADMIN_LEVEL_H // флаг вип игрока(для отображения вип в табе)
static szSound[] = "buttons/button7.wav"
public plugin_init()
{
register_plugin("VIP_Gungame_by_pl", "1.0", "rukojop :-)")
register_event("CurWeapon", "WeaponChange", "be", "1=1" )//регистрируем событие смены оружия (фикс бага с пропаданием скорости и гравы)
register_message( get_user_msgid ("ScoreAttrib"), "msg_ScoreAttrib" )
RegisterHam (Ham_TakeDamage, "player", "UserTakeDamage") // регистрируем событие получения урона
RegisterHam(Ham_Spawn, "player", "SetSpeedGravity", 1) // регистрируем момент возрождения игрока, в этот момент будем выдавать скорость и гравитацию
RegisterHam(Ham_Killed,"player","ham_player_kill")//тут регистрируем момент смерти, где будем обнулять идентификатор наличия вип возможностей
g_msgShake = get_user_msgid("ScreenShake")
g_msgFade = get_user_msgid("ScreenFade")
}
public plugin_precache()
{
precache_sound(szSound)
}
public msg_ScoreAttrib( msg_id, msg_dest, receiver ) //эта функция отображает тэг ВИП в таблице счета
{
/* original code by xpaw & Radius */
#define ARG_PlayerID 1
#define ARG_Flags 2
#define SCOREBOARD_VIP (1 << 2)
if( get_user_flags( get_msg_arg_int(ARG_PlayerID) ) & VIP_FLAG )
set_msg_arg_int( ARG_Flags, ARG_BYTE, get_msg_arg_int(ARG_Flags) | SCOREBOARD_VIP )
}
public client_disconnect(id) // при дисконнекте игрока обнуляем идентификаторы
{
g_ability[id] = false
g_count[id] = 0
}
public ham_player_kill(victim, attacker, corpse)
{
g_ability[victim] = false
}
public WeaponChange(id) //
{
if(g_ability[id])
{
set_user_maxspeed(id, VIP_SPEED)
set_user_gravity(id,VIP_GRAVITY)
}
}
public UserTakeDamage (victim, weapon, attacker, Float:damage, damagebits)
{
if(victim == attacker || !victim) // если жертва это атакуюший или жертвы нет, то начинаем заново
return
if (!is_user_alive(attacker))
return
if ((get_user_flags(attacker) & ADMIN_LEVEL_H)) // если игрок жив и имеет флаг t, то увеличиваем урон
{
SetHamParamFloat(4, damage * VIP_DAMAGE)
//PrintChatColor(attacker, _, "!gСТАНДАРТНЫЙ УРОН !t%.1f !gVIP УРОН !t%.1f", damage,(damage * VIP_DAMAGE))
}
if (g_ability[attacker])
{
SetHamParamFloat(4, damage * VIP_DAMAGE)
//PrintChatColor(attacker, _, "!gСТАНДАРТНЫЙ УРОН !t%.1f !gVIP УРОН !t%.1f", damage,(damage * VIP_DAMAGE))
}
}
public SetSpeedGravity (id)
{
new Death[33], Frags[33]
Death[id] = get_user_deaths(id)//получаем смерть игрока и заносим в массив
Frags[id] = get_user_frags(id) //получаем фраги игрока и заносим в массив
new Float:speed = get_user_maxspeed(id) + VIP_SPEED
/*
if (!is_user_alive(id))
return*/
if (((Death[id] - Frags[id]) > VIP_DIFFERENCE) && (g_count[id] < COUNT) && (is_user_alive(id)))
{
set_user_maxspeed(id , speed)
set_user_gravity(id,VIP_GRAVITY)
g_ability[id] = true
set_task(0.1, "Shake", id)
client_cmd( id, "spk %s", szSound )
g_count[id]++
PrintChatColor(id, _, "!gОсталось !t%d !yвозрождений(я) с !tVIP возможностями", (COUNT - g_count[id]))
if(((COUNT - g_count[id]) < (COUNT - 1)))
PrintChatColor(id, _, "!tskype для покупки VIP !gpl-evgen")
}
if ((get_user_flags(id) & ADMIN_LEVEL_H) && (is_user_alive(id)))
{
set_user_maxspeed(id , speed)
//увеличиваем гравитацию
set_user_gravity(id,VIP_GRAVITY)
g_ability[id] = true
return HAM_IGNORED
}
return HAM_HANDLED
}
public Shake (id)
{
message_begin( MSG_ONE_UNRELIABLE, g_msgFade, .player=id )
{
write_short( 1<<14 )
write_short( 1<<5 )
write_short( FFADE_IN )
write_byte( 34 )
write_byte( 34 )
write_byte( 139 )
write_byte( 75 )
}
message_end( )
message_begin( MSG_ONE_UNRELIABLE, g_msgShake, .player=id )
{
write_short( 255<<15 )
write_short( 50<<8 )
write_short( 255<<15 )
}
message_end( )
}