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

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

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

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

Подскажите как сделать такой плагин

, autorespawn 15 sec
Статус пользователя LaFA
сообщение 10.7.2015, 6:20
Сообщение #1


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793


Хочу такой же отсчет и восстановление всех кт в течении первых 15 секунд раунда pardon.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя LaFA
сообщение 10.7.2015, 15:31
Сообщение #2


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

Подскажите хоть что-нибудь, попробую сам сварганить, вроде задача не сложная
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя oxoTHuk.
сообщение 10.7.2015, 15:45
Сообщение #3


Иконка группы

Стаж: 17 лет

Сообщений: 879
Благодарностей: 515
Полезность: 867

Ну так по идее простой счетчик с float, если не ошибаюсь.
Код:
public show_timer(id)
{
Float:szTime[id] = 5.0 // szTime[id] ранее наша зарегистрированая переменная , 5 время в
//секундах
show_second_timer(id) // здесь вызываем наш таймер
}

Ссылка: http://amxxmodx.ru/other/565-taymer.html
Попробуй заменить на то, что я предложил. Но не знаю как это со стороны грамотности.

Отредактировал: oxoTHuk., - 10.7.2015, 15:51
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя stardock
сообщение 10.7.2015, 15:57
Сообщение #4


Стаж: 13 лет

Сообщений: 222
Благодарностей: 94
Полезность: 78

А зачем 5 раз в секунду слать hud ? Достаточно и один/сек.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя LaFA
сообщение 10.7.2015, 16:04
Сообщение #5


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

stardock, зачем вообще слать худы, можно просто восстанавливать молча :P
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя LaFA
сообщение 10.7.2015, 16:48
Сообщение #6


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

горе код
Код
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>

new Float:iTime [33]

public plugin_init()
{  
    register_event("ResetHUD", "newRound", "b")
    register_event( "DeathMsg", "Hook_Deathmessage", "a" );
}
public newRound(id)
{
    if( task_exists( 1337 ) )
        remove_task( 1337 )
    
    Float:iTime[id] = 15.0
    set_task( 1.0, "countdown", 1337, _, _, "a", 15 )
    
    return PLUGIN_HANDLED;
}
public countdown()
{
    if( Float:iTime[id] > 0.0)
    {
        iTime--
        set_hudmessage(170, 170, 0, 0.0, 0.0, 1, 0.02, 1.0, 0.01, 0.1, 10);  
        show_hudmessage( 0, "Восстановление %i сек.", iTime )
    }
    
    else if( Float:iTime == 1.0 )
    {
        iTime--
            set_hudmessage(170, 170, 0, 0.0, 0.0, 1, 0.02, 1.0, 0.01, 0.1, 10);  
        show_hudmessage( 0, "Лафа закончилась")
    }
}
public Hook_Deathmessage()
{
    new victim = read_data( 2 );
    
    if(iTime >= 1)
        set_task(1.0,"Spawn",victim)
    
    return PLUGIN_HANDLED
}
public Spawn(id)
{
    if(cs_get_user_team(id) == CS_TEAM_CT)
        ExecuteHamB(Ham_CS_RoundRespawn, id);
}
Чет я начудил, никак исправить не могу cbf1b2bfde1a.gif

compile.exe
Код
//
// D:\lafyn9\scripting\float_ct_respawn.sma(25) : warning 221: label name "Float" shadows tag name
// D:\lafyn9\scripting\float_ct_respawn.sma(29) : warning 203: symbol is never used: "Float"
// D:\lafyn9\scripting\float_ct_respawn.sma(32) : error 017: undefined symbol "id"
// D:\lafyn9\scripting\float_ct_respawn.sma(34) : error 022: must be lvalue (non-constant)
// D:\lafyn9\scripting\float_ct_respawn.sma(34 -- 36): warning 215: expression has no effect
// D:\lafyn9\scripting\float_ct_respawn.sma(40) : error 033: array must be indexed (variable "iTime")
// D:\lafyn9\scripting\float_ct_respawn.sma(42) : error 022: must be lvalue (non-constant)
// D:\lafyn9\scripting\float_ct_respawn.sma(43) : warning 217: loose indentation
// D:\lafyn9\scripting\float_ct_respawn.sma(44) : warning 217: loose indentation
// D:\lafyn9\scripting\float_ct_respawn.sma(52) : error 033: array must be indexed (variable "iTime")
// 5 Errors.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя zippel
сообщение 10.7.2015, 16:56
Сообщение #7


Стаж: 17 лет

Сообщений: 918
Благодарностей: 105
Полезность: 1

Примерно ты в том направлении, но я думаю ты забыл перехватить хук на респ игрока, который будет не давать ему отреспится, потому что например у меня на сервере можно после 15, 30 и даже 1 мин. зайти в игру :)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя LaFA
сообщение 10.7.2015, 17:06
Сообщение #8


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

zippel, хм, по плану я хотел восстановление в первые 15 секунд раунда и только)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя zippel
сообщение 10.7.2015, 18:10
Сообщение #9


Стаж: 17 лет

Сообщений: 918
Благодарностей: 105
Полезность: 1

Цитата(LaFA @ 10.7.2015, 18:06) *
zippel, хм, по плану я хотел восстановление в первые 15 секунд раунда и только)

это типа как, что бы после истичения времени игрок не мог войти в игру?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 10.7.2015, 19:07
Сообщение #10


Стаж: 13 лет

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

LaFA,
Код:
#include <amxmodx>
#include <hamsandwich>
#include <cstrike>

new szTime[33]
new g_sys_time

public plugin_init()
{
register_plugin("Lafa's_dream", "0.1", "AUTHOR")
RegisterHam(Ham_Killed, "player", "Event_Ham_Killed")
register_event("HLTV", "Event_RoundStart", "a", "1=0", "2=0")
}

public Event_RoundStart()
{
g_sys_time = get_systime()
}

public ham_player_kill(victim, attacker, corpse)
{
if((get_systime() - g_sys_time) < 15)
show_timer(victim)
}

public show_timer(id)
{
szTime[id] = 5 // szTime[id] ранее наша зарегистрированая переменная , 5 время в
set_task(1.0,"show_second_timer",id,_,_,"b") // Время через которое будет -1 сек от нашего таймера
}

public show_second_timer(id)
{
if(szTime[id] > 0) // Если время больше 0 то показываем сообшение
{
set_hudmessage(255, 0, 0, 0.28, 0.69, 0, 6.0, 12.0)
show_hudmessage(id, "До вашего воскрешения осталось %d сек",szTime[id]) //сообщение
szTime[id] -- // Отнимаем время от нашего таймера
}
else if(cs_get_user_team(id) == CS_TEAM_CT)
{
ExecuteHamB(Ham_CS_RoundRespawn, id)
}
}

Попробуй это. Скомпиллировалось, но я не тестил на сервере

Отредактировал: filip, - 10.7.2015, 19:08
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 10.7.2015, 19:11
Сообщение #11


Стаж: 13 лет

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

Еще момент, там не дробное число (пока), я нубло еще то в скриптинге, так что пока целые числа, если все будет работать, попробую дробные запилить

Отредактировал: filip, - 10.7.2015, 19:11
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя LaFA
сообщение 10.7.2015, 21:57
Сообщение #12


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

zippel, не понимаю, что там и 10 рублей может стоить, особенно с дхудом на пол экрана и прозрачными модельками..
filip, спасибо, я завтра попробую, как с интернетом станет получше.. чет провайдер совсем ахалел
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя zippel
сообщение 11.7.2015, 6:19
Сообщение #13


Стаж: 17 лет

Сообщений: 918
Благодарностей: 105
Полезность: 1

Цитата(LaFA @ 10.7.2015, 22:52) *
zippel, не понимаю, что там и 10 рублей может стоить

Понимал бы - не задавал бы тут такие вопросы. Вот я сейчас вижу как ты преуспел. Я предлагаю полноценный готовый скрипт для твоих нужд. Подробнее в скайп.

Цитата(LaFA @ 10.7.2015, 22:52) *
zippel, особенно с дхудом на пол экрана и прозрачными модельками..

Прозрачные модельки не для тебя, это совсем другой скрипт, ты не заостряй внимания на детали в скринах, читай внимательно что я написал.

Скринчик
Прикрепленное изображение


Отредактировал: zippel, - 11.7.2015, 6:26
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 11.7.2015, 10:01
Сообщение #14


Стаж: 13 лет

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

То, что я выше сделал не работает, вот рабочий вариант (без десятых секунд)
Код:
#include <amxmodx>
#include <hamsandwich>
#include <cstrike>
#include <WPMGPrintChatColor>

new szTime[33]
new g_sys_time

public plugin_init()
{
register_plugin("Lafa's_dream", "0.1", "AUTHOR")
RegisterHam(Ham_Killed, "player", "Event_Ham_Killed")
register_event("HLTV", "Event_RoundStart", "a", "1=0", "2=0")
}

public Event_RoundStart()
{
g_sys_time = get_systime()
}

public Event_Ham_Killed(victim, attacker, corpse)
{
if((get_systime() - g_sys_time) < 15)
show_timer(victim)
//PrintChatColor(victim, _, "!gМомент !tубийства !yвпойман")
}

public show_timer(id)
{
szTime[id] = 5 // szTime[id] ранее наша зарегистрированая переменная , 5 время в
set_task(1.0,"show_second_timer",id,_,_,"a", 6) // Время через которое будет -1 сек от нашего таймера
//PrintChatColor(id, _, "!gСейчас должно !tпоказать !yтаймер, !gszTime = !t%d", szTime[id])
}

public show_second_timer(id)
{
//PrintChatColor(id, _, "!gдошли !tдо !yпоказа")
if(cs_get_user_team(id) == CS_TEAM_CT)
{
if(szTime[id] > 0) // Если время больше 0 то показываем сообшение
{
set_hudmessage(255, 0, 0, 0.28, 0.69, 0, 6.0, 12.0)
show_hudmessage(id, "До вашего воскрешения осталось %d сек",szTime[id]) //сообщение
szTime[id] -- // Отнимаем время от нашего таймера
}
else
{
ExecuteHamB(Ham_CS_RoundRespawn, id)
}
}
}


Отредактировал: filip, - 11.7.2015, 10:28
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя LaFA
сообщение 11.7.2015, 10:55
Сообщение #15


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

filip, пишу с телефона, спасибо за помощь, но не совсем то) восстаналивать нужно все 15 секунд с начала раунда, а по коду восстанавливает после 15 секунды
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя filip
сообщение 11.7.2015, 11:37
Сообщение #16


Стаж: 13 лет

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

Теперь дробное, правда там нулей куча, восстанавливает только кт и только втечение первых 15 секунд раунда.

Код:
#include <amxmodx>
#include <hamsandwich>
#include <cstrike>
//#include <WPMGPrintChatColor>

new Float: szTime[33]
new g_sys_time

public plugin_init()
{
register_plugin("Lafa's_dream", "0.1", "AUTHOR")
register_event("HLTV", "Event_RoundStart", "a", "1=0", "2=0")
RegisterHam(Ham_Killed, "player", "Event_Ham_Killed")
}

public Event_RoundStart()
{
g_sys_time = get_systime()
}

public Event_Ham_Killed(victim, attacker, corpse)
{
if((get_systime() - g_sys_time) < 15)
show_timer(victim)
//PrintChatColor(victim, _, "!gМомент !tубийства !yвпойман")
}

public show_timer(id)
{
szTime[id] = 5.0
set_task(0.1,"show_second_timer",id,_,_,"a", 54) // Время через которое будет -1 сек от нашего таймера
//PrintChatColor(id, _, "!gСейчас должно !tпоказать !yтаймер, !gszTime = !t%d", szTime[id])
}

public show_second_timer(id)
{
//PrintChatColor(id, _, "!gдошли !tдо !yпоказа")
if(cs_get_user_team(id) == CS_TEAM_CT)
{
if(szTime[id] > 0.0) // Если время больше 0 то показываем сообшение
{
set_hudmessage(255, 0, 0, 0.28, 0.69, 0, 6.0, 12.0)
show_hudmessage(id, "До вашего воскрешения осталось %f сек",szTime[id]) //сообщение
szTime[id] -= 0.1 // Отнимаем время от нашего таймера
}
else
{
ExecuteHamB(Ham_CS_RoundRespawn, id)
}
}
}


Было еще тут где-то обсуждение как дробные числа выводить округленными, нужно поискать, может получится прикрутить.

Отредактировал: filip, - 11.7.2015, 11:42
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Nixon
сообщение 11.7.2015, 11:43
Сообщение #17


Стаж: 12 лет

Сообщений: 399
Благодарностей: 192
Полезность: 589

Цитата(filip @ 11.7.2015, 12:33) *
правда там нулей куча

Вместо %f сделать %.1f
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя filip
сообщение 11.7.2015, 12:08
Сообщение #18


Стаж: 13 лет

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

Nixon, спасибо, еще добавил небольшой эффект тряски экрана и затемнения при спавне. Работает первые 15 секунд после начала раунда, на видео все видно
видео

Код:
#include <amxmodx>
#include <hamsandwich>
#include <cstrike>

#define FFADE_IN 0x0000 //это не трогать, это для тряски экрана

new Float: szTime[33]
new g_sys_time
new g_msgFade, g_msgShake

public plugin_init()
{
register_plugin("Lafa's_dream", "0.1", "AUTHOR")
register_event("HLTV", "Event_RoundStart", "a", "1=0", "2=0")
RegisterHam(Ham_Killed, "player", "Event_Ham_Killed")

g_msgShake = get_user_msgid("ScreenShake")
g_msgFade = get_user_msgid("ScreenFade")
}

public Event_RoundStart()
{
g_sys_time = get_systime()
}

public Event_Ham_Killed(victim, attacker, corpse)
{
if((get_systime() - g_sys_time) < 15)
show_timer(victim)
}

public show_timer(id)
{
szTime[id] = 5.0
set_task(0.1,"show_second_timer",id,_,_,"a", 54) // Время через которое будет -1 сек от нашего таймера
}

public show_second_timer(id)
{
if(cs_get_user_team(id) == CS_TEAM_CT)
{
if(szTime[id] > 0.0) // Если время больше 0 то показываем сообшение
{
set_hudmessage(255, 0, 0, 0.28, 0.69, 0, 6.0, 12.0)
show_hudmessage(id, "До вашего воскрешения осталось %.1f сек",szTime[id]) //сообщение
szTime[id] -= 0.1 // Отнимаем время от нашего таймера
}
else
{
ExecuteHamB(Ham_CS_RoundRespawn, id)
set_task(0.1, "Shake", id)
}
}
}

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


Отредактировал: filip, - 11.7.2015, 12:09
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя LaFA
сообщение 11.7.2015, 23:02
Сообщение #19


Стаж: 16 лет

Сообщений: 4505
Благодарностей: 3256
Полезность: 793

filip, ток домой пришел, все равно не совсем то хд

Этот худ виден всем в течении 15 секунд(просто не стал делать гифку всех 15 секунд), в эти 15 секунд всех кт восстанавливает беспрерывно, ну может задержка в долю секунды разве что)
В принципе, почти все сделано, остальное я сам доделать, вроде, смогу. Спасибо за помощь, еще раз happy.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: