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

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

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

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

2 страниц V   1 2

Wepon Mod , получение оружия

, Изменить метод
Статус пользователя cangncan
сообщение 23.11.2016, 9:20
Сообщение #1


Стаж: 13 лет

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

Доброго времени всем.
Имею на сервере Day of Defeat плагин, который МГНОВЕННО выдает оружие в любом месте карты через меню say /gunmenu или напрямую при вводе имени оружия, например say /garand

Выдачу оружия где угодно считаю не правильной и поэтому нужно чтобы оружие выдавалось только по событию респавна игрока, т.е. при вызове оружия оно выдавалось только при следующем возрождении
Само событие респавна присутствует в плагине и работает оно если сохранить выбор оружия (команда say /gunsave)

Помогите переделать плагин, сам в коде совсем слаб и уже сломал голову над решением

вот сам плагинПрикрепленный файл  weaponmod3.1.sma ( 44,02 килобайт ) Кол-во скачиваний: 25
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя cangncan
сообщение 23.11.2016, 14:47
Сообщение #2


Стаж: 13 лет

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

ребят ну хотя бы помогите хоть понять как сделать.

RegisterHam(Ham_Spawn,"player","func_respawn", 1) - регистрация события респавна, тогда можно ли попробовать использовать set_task ???

и этот код:
Код
public func_garand(id) {
    func_give_weapon(id,5)
    return PLUGIN_HANDLED
}

заменить на ПРИМЕРНО такой:
Код
public func_garand(id) {
    set_task(func_respawn, "func_give_weapon(id,5)", "b")
    return PLUGIN_HANDLED
}


не ругайте за не правильный код. просто поправьте если можете на то как правильно.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя cangncan
сообщение 28.11.2016, 14:31
Сообщение #3


Стаж: 13 лет

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

Ау, люди неужели нет никому дела до того, чтобы помочь? отзовитесь, добрые люди!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 28.11.2016, 14:48
Сообщение #4


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

тебе нужно при выборе оружия из меню делать респавн и выдавать оружие или же тебе нужно выбрать оружие но даст только при след респавне ?


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя cangncan
сообщение 28.11.2016, 15:29
Сообщение #5


Стаж: 13 лет

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

Цитата(ssx @ 28.11.2016, 15:48) *
тебе нужно при выборе оружия из меню делать респавн и выдавать оружие или же тебе нужно выбрать оружие но даст только при след респавне ?

Второе, выдача после респавна (или же тебе нужно выбрать оружие но даст только при след респавне )

Отредактировал: cangncan, - 28.11.2016, 15:29
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Algalon
сообщение 28.11.2016, 17:08
Сообщение #6
Стаж: 11 лет

Сообщений: 163
Благодарностей: 60
Полезность: 291

Не проще ли сделать возможность выбора оружия как в CSDM, т.е. что бы меню само открывалось при первом респавне игрока?
А то больно уж немудрено с выбором оружия через чат команды, да и c сохранением оружия тоже.
Cкрытый текст
Давно я не видел таких наркоманских плагинов, автор похоже не в курсе существования циклов. Куча ненужных функций, аж на 1000 строк. cbf1b2bfde1a.gif


Отредактировал: Algalon, - 28.11.2016, 17:17
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 28.11.2016, 18:30
Сообщение #7


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Ничего сложного нету:
1. Глобальный массив[33]
2. отлов смерти
3. менюшка
4. запись выбора в массив[33]
5. респавн игрока
6. отлов респавна игрока в post
7. выдача оружия.

Я себе на HLDM сделал оружейку что когда убивают - открывается , выбираешь, тебя респавнит и выдает оружие.

Отредактировал: ssx, - 28.11.2016, 18:32


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя cangncan
сообщение 28.11.2016, 23:29
Сообщение #8


Стаж: 13 лет

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

[b]Algalon, нет не проще, эт ж не контра, а дод. И ксдм для тренировки больше подходит нежели для классической игры.

ssx, - все конечно это хорошо, а особенно рассуждать как должно работать, но только у меня в голове тоже много планов, а как сделать и не знаю.
мне бы ез всего "этого", оставить все как есть, т.к. сам плагин меня устраивает, но только хочется чтобы выбранное оружие выдавалось только после респавна.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Algalon
сообщение 29.11.2016, 11:13
Сообщение #9
Стаж: 11 лет

Сообщений: 163
Благодарностей: 60
Полезность: 291

cangncan, я же не предлагаю переделать классический режим игры в дм, я предложил лишь сделать авто открывающиеся меню при первом появлении игрока.
Cкрытый текст
Т.е. игрок зашел на сервер -> раунд начался -> игрок появился -> дальше у него открылось меню -> он выбрал себе оружие -> это оружие запомнилось и все.
Больше меню у него открывается не будет, если только он этого сам этого не пожелает, через чат команду в новом раунде.

Ладно вернемся к нашим баранам, по хорошему твой плагин нужно было бы переписать полностью.
Ну да ладно, попробуем нашаманить что нибудь
---
Стопе, так есть же квары ограничения покупки оружия.
Код:
p_weapon_delay = register_cvar("swm_delay","5.0")
p_weapon_changes = register_cvar("swm_changes", "2")

И еще, в доде квар mp_buytime есть же, да?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя cangncan
сообщение 29.11.2016, 13:02
Сообщение #10


Стаж: 13 лет

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

Algalon,
p_weapon_changes = register_cvar("swm_changes", "2") - Сколько раз за "жизнь" (после респавна обнуляестся) можно получить оружие.
p_weapon_delay = register_cvar("swm_delay","5.0") - Задержка перед тем как выдать оружие снова. Особенно хорошо если swm_changes "10".
У меня на сервере стоит swm_changes", "1" и "swm_delay","5.0"
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Algalon
сообщение 29.11.2016, 13:08
Сообщение #11
Стаж: 11 лет

Сообщений: 163
Благодарностей: 60
Полезность: 291

Цитата(Algalon @ 29.11.2016, 12:13) *
И еще, в доде квар mp_buytime есть же, да?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя cangncan
сообщение 29.11.2016, 13:13
Сообщение #12


Стаж: 13 лет

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

Algalon,
mp_buytime - нет. Оружие выдается на основе серверных кваров-ограничений, например американская снайп. винтовка mp_limitalliesspring "2" - в итоге на команду не более 2 штук.
Этот плагин при помощи своих кваров:
swm_max_"weaponname" или swm_disable_"weaponname"
помогает ограничить или запретить выдачу через плагин.
Ограничения плагина и серверные работают независимо друг от друга.

Отредактировал: cangncan, - 29.11.2016, 13:16
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя cangncan
сообщение 30.11.2016, 10:50
Сообщение #13


Стаж: 13 лет

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

Algalon, и всё, снова тишина...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Algalon
сообщение 30.11.2016, 12:24
Сообщение #14
Стаж: 11 лет

Сообщений: 163
Благодарностей: 60
Полезность: 291

cangncan, как будто мне больше нечем заняться, кроме как сидеть целыми сутками на форуме и помогать всем безвозмездно?
Терпение нужно иметь хотя бы малейшее, Москва не сразу строилась.

Два варианта развития события:
1) Нужно тупо запилить ограничение время выдачи оружия после спавна игрока, как при mp_buytime и все.
2) Увеличить значение квара swm_delay, ну и сделать обнуление переменной при смерти игрока.

Какой вариант предпочтительнее?

Отредактировал: Algalon, - 30.11.2016, 12:27
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя cangncan
сообщение 30.11.2016, 14:13
Сообщение #15


Стаж: 13 лет

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

Algalon, не злись. Я думаю первый вариант. Но хотя не совсем понял. А возможно сделать так как я описал во втором посту???
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Algalon
сообщение 30.11.2016, 20:21
Сообщение #16
Стаж: 11 лет

Сообщений: 163
Благодарностей: 60
Полезность: 291

cangncan, по сути это одно и тоже, мы запрещаем игроку брать оружие через определенный промежуток времени.
Игрок появился, ему дается 15 сек на закупку, не успел - беда., успел - молодец, но больше оружия уже он не сможет взять, пока не умрет.

Пробуй тогда вот так сделать, потом расскажешь результат.
Cкрытый текст

Заменить строку 173
Код:
new const messages[16][] = { "* The weapons mod is disable right now.",
--->
Код:
new const messages[17][] = { "* The weapons mod is disable right now.",


Вставить после 187 строки
Код:
"* bind 6 ^"say /k98^"", "* You must un-deploy before getting a new weapon!" }
--->
Код:
"* bind 6 ^"say /k98^"", "* You must un-deploy before getting a new weapon!",
"* Achtung! %d seconds have passed. You can't buy anything now!" }


Заменить строку 378
Код:
// See if player's gun give delay has been met
if(get_gametime() < client_give_timer[id])
return PLUGIN_HANDLED
--->
Код:
// See if player's gun give delay has been met
if(get_gametime() > client_give_timer[id])
{
client_print(id,print_chat,messages[16],get_pcvar_num(p_weapon_delay))
return PLUGIN_HANDLED
}


Вырезать строку 547
Код:
// Grab HL timestamp for determining the next time this client can get another gun
client_give_timer[id] = get_gametime() + get_pcvar_float(p_weapon_delay)


Вставить вырезанную строку после строки 679
Код:
// Show player notification message once
if(client_notify[id])
{
client_print(id,print_chat,messages[6])
client_notify[id] = 0
}
--->
Код:
// Show player notification message once
if(client_notify[id])
{
client_print(id,print_chat,messages[6])
client_notify[id] = 0
}

// Grab HL timestamp for determining the next time this client can get another gun
client_give_timer[id] = get_gametime() + get_pcvar_float(p_weapon_delay)


Измени квар swm_delay на 15 сек
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя cangncan
сообщение 30.11.2016, 22:11
Сообщение #17


Стаж: 13 лет

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

Algalon, все сделал, опробовал.
Прикольно в принципе, даже очень. Но, если использовать команду /gunsave и сдохнуть меньше чем через 15 сек, то оружие норм выдается. Если выйти за пределы 15 секунд, сдохнуть через 16, то пишется сообщение под номером 17, т.е "* Achtung! %d seconds have passed. You can't buy anything now!"
по ходу плагин тупо считает 15 сек после респавна и не видит сдох ты или нет.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя cangncan
сообщение 1.12.2016, 8:33
Сообщение #18


Стаж: 13 лет

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

cangncan, Обнаружился еще косяк, сервер завис с ошибкой, только я забыл ее текст, но по-моему что то типа такого: "FATAL ERROR (shutting down): MSG_ONE or MSG_ONE_UNRELIABLE with no target entity ".
Кроме этого плагина изменений на сервере небыло около 3 месяцев и небыло ни одного падения...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Algalon
сообщение 1.12.2016, 9:32
Сообщение #19
Стаж: 11 лет

Сообщений: 163
Благодарностей: 60
Полезность: 291

Цитата(cangncan @ 30.11.2016, 23:11) *
Algalon, все сделал, опробовал.
Прикольно в принципе, даже очень. Но, если использовать команду /gunsave и сдохнуть меньше чем через 15 сек, то оружие норм выдается. Если выйти за пределы 15 секунд, сдохнуть через 16, то пишется сообщение под номером 17, т.е "* Achtung! %d seconds have passed. You can't buy anything now!"
по ходу плагин тупо считает 15 сек после респавна и не видит сдох ты или нет.

Можно проще, не работает сохранение оружия. smile.gif
Cкрытый текст

Удалить строки 377-382
Код:
// See if player's gun give delay has been met
if(get_gametime() > client_give_timer[id])
{
client_print(id,print_chat,messages[16],get_pcvar_num(p_weapon_delay))
return PLUGIN_HANDLED
}

Вставить после строки 411
Код:
// See if player is alive and handle dead player gun choice notification
if(!is_user_alive(id))
{
if(client_gunsave[id])
{
client_print(id,print_chat,messages[4])
client_chosen_class[id] = weapon_class_id // Store weapon choice
}
else
{
client_print(id,print_chat,messages[5])
}
return PLUGIN_HANDLED
}
--->
Код:
// See if player is alive and handle dead player gun choice notification
if(!is_user_alive(id))
{
if(client_gunsave[id])
{
client_print(id,print_chat,messages[4])
client_chosen_class[id] = weapon_class_id // Store weapon choice
}
else
{
client_print(id,print_chat,messages[5])
}
return PLUGIN_HANDLED
}

// See if player's gun give delay has been met
if(get_gametime() > client_give_timer[id])
{
client_print(id,print_chat,messages[16],get_pcvar_num(p_weapon_delay))

if(client_gunsave[id])
{
client_print(id,print_chat,messages[4])
client_chosen_class[id] = weapon_class_id // Store weapon choice
}
return PLUGIN_HANDLED
}


Цитата(cangncan @ 1.12.2016, 9:33) *
cangncan, Обнаружился еще косяк, сервер завис с ошибкой, только я забыл ее текст, но по-моему что то типа такого: "FATAL ERROR (shutting down): MSG_ONE or MSG_ONE_UNRELIABLE with no target entity ".
Кроме этого плагина изменений на сервере небыло около 3 месяцев и небыло ни одного падения...

Ошибка не связана с этим плагином, в коде нет функций генерирующих клиентские сообщения.
Ну по крайней мере при беглом осмотре я их не заметил, а от client_print маловероятно появление такой ошибки.
Скорее всего ты просто не замечал эту ошибку ранее, включи отладку на сервере и понаблюдай за ним.
Можешь поискать в исходниках своих функцию message_begin или похожую.

Отредактировал: Algalon, - 1.12.2016, 9:35
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Algalon
сообщение 1.12.2016, 9:42
Сообщение #20
Стаж: 11 лет

Сообщений: 163
Благодарностей: 60
Полезность: 291

Ах да, добавь еще проверку на живого игрока

Код:
public func_respawn(id) {
--->
Код:
public func_respawn(id) {
if(!is_user_alive(id))
return

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