Hammer valve editor изменение объекта по таймеру сервера

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Доброго времени суток.

Назрел такой вопрос, а даже, скорее, хочу поднять такой вопрос:
"Возможно ли связать карту с плагином сервера?"
А точнее, мне нужно создать таймер на сервере, т.е. через плагин. По истечению этого таймера на карте будет, к примеру, открываться дверь, или же просто удаляться блок.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Да даже не команда.
Просто открывать дверь на карте по истечению таймера плагина.

Добавлено через 2 минуты
Т.е. свои команды на каждой карте от плагина?
PHP:
decl String:Map[100];
GetCurrentMap(Map, sizeof(Map));
if (StrEqual(Map, "de_dust2")) //Выполняемое действие на карте "de_dust2".

Не то. Я имею ввиду:

Запускается карта, без разницы какая. В начале раунда запускается таймер на 30 сек к примеру, по его истечению открываются двери.
Или, к примеру, не двери открываются, а удаляется какой-нибудь блок, будь то браш, если это возможно.
 
Последнее редактирование:

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Primo, сказал бы просто, что нужна команда открывания дверей/удаления браша. Таймер здесь, в принципе, не при чём.
Мне напоминает зомби-карты... Это встраивается в сами карты.

Понимайте как хотите, я привёл пример на таймере, можно и команды)

Действительно, был мод в cs1.6, назывался BaseBuilder, так там удалялись блоки по таймеру. Однако, так же открывались двери в JailBreak на карте по команде или таймеру. Мне кажется это встраивается не в карту.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Нашел такую вещь:
http://hlmod.ru/forum/plaginy-dlya-sourcemod/15791-open-door-time.html

Но мне нужно не отлавливать состояние двери, а потом закрывать дверь.
Мне нужно по окончанию таймера открывать дверь.

Добавлено через 3 минуты
Я просто в этом исходнике не осознаю зачем создаётся Array.
 
Последнее редактирование:

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
PHP:
new Handle:TimerS;

public OnPluginStart() 
{
	HookEvent("round_start", RoundStart);
}

public RoundStart(Handle:event, const String:name[], bool:silent)
{
	TimerS = CreateTimer(30.0, Event_DoorOpen);
}

public Action:Event_DoorOpen(Handle:timer)
{
	new ent = -1;
	while ((ent = FindEntityByClassname(ent, "func_door")) != INVALID_ENT_REFERENCE)
	{
		AcceptEntityInput(ent, "Open");
	}
	KillTimer(TimerS);
}

Будет ли верным такая функция?
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Назначение? Если убивать таймер под конец раунда (наступило заранее начало), то несколько не так.

Просто думал, что лучше будет остановить таймер. Или же лучше приравнять к INVALID_HANDLE?
Ваш вариант хотел бы услышать, как лучше поступить с таймером, чтобы он корректно отключился.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #9
Primo, сделай так:
PHP:
public OnPluginStart() 
{
	HookEvent("round_start", RoundStart, EventHookMode_PostNoCopy);
}

public RoundStart(Handle:event, const String:name[], bool:silent)
{
	CreateTimer(30.0, Event_DoorOpen);
}

public Action:Event_DoorOpen(Handle:timer)
{
	new ent = -1;
	while ((ent = FindEntityByClassname(ent, "func_door")) != INVALID_ENT_REFERENCE)
	{
		AcceptEntityInput(ent, "Open");
	}
	return Plugin_Stop;
}
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #10
AlmazON, Action: стоит, лучше что нибудь вернуть. Функция то не void.
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Доброго времени суток.

Назрел такой вопрос, а даже, скорее, хочу поднять такой вопрос:
"Возможно ли связать карту с плагином сервера?"
А точнее, мне нужно создать таймер на сервере, т.е. через плагин. По истечению этого таймера на карте будет, к примеру, открываться дверь, или же просто удаляться блок.

Все можно, можно через плагин, можно через карту.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #12
AlmazON, повторяю, функция не void, а Action следовательно она должна возвращать одно из значений:
enum Action
{
Plugin_Continue = 0, /**< Continue with the original action */
Plugin_Changed = 1, /**< Inputs or outputs have been overridden with new values */
Plugin_Handled = 3, /**< Handle the action at the end (don't call it) */
Plugin_Stop = 4, /**< Immediately stop the hook chain and handle the original */
};
Если ты этого не сделаешь она сама вернет 0. Так что от того что я вернул значение хуже не стало.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Нет такого в Павне. Вот твой return из натива таймера:
@return Plugin_Stop to stop a repeating timer, any other value for default behavior.
"Plugin_Stop для остановки повторяющегося таймера и любое другое значение по умолчанию".
wS, например, не пишет в обычных таймерах такого "дополнения.
Привычку ему ещё такую дашь, ТС везде потом это будет писать)
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #14
wS, например, не пишет в обычных таймерах такого "дополнения.
Пффф.. не смеши меня так.

Нет такого в Павне.
Какая разница павн или нет. Тип функции то определен и это закономерно для всех языков подобных си.


@return Plugin_Stop to stop a repeating timer, any other value for default behavior.
"Plugin_Stop для остановки повторяющегося таймера и любое другое значение по умолчанию".
Вот именно "значение по умолчанию", если ты что-то не вернешь то компилятор сделает это за тебя.

Вот сам подумай.
PHP:
bool:IsClientAdeckvat(client)
{
	if(проверки, бла-бла)
	{
		return true;
	}
	return false;
}
Фукнция имеет тип bool, следовательно она должна возвращать true или false

PHP:
GetClientMoney(client)
{
	return GetEntData(iClient, m_iAccount);
}

Int ф-я, следовательно она должна возвращать целое число. С float точно так же.
Но есть пустой тип фукнции - void, он ничего не возвращает.
Обычно в павне этого не пишут, потому что компилятор сам это дописывает, но иногда пишут (в team switch вроде бы я видел).

Action это тоже своего рода тип ф-и. И он должен возвращать значение. Если ты его не вернешь это сделеает компилятор и вернет 0.
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Нет такого в Павне. Вот твой return из натива таймера:
@return Plugin_Stop to stop a repeating timer, any other value for default behavior.
"Plugin_Stop для остановки повторяющегося таймера и любое другое значение по умолчанию".
wS, например, не пишет в обычных таймерах такого "дополнения.
Привычку ему ещё такую дашь, ТС везде потом это будет писать)

Я знаком с C, однако, сюда я пишу только с вопросами, касающихся различных функций, которых я не знаю.
Вы не думайте, что я такой тупой:acute:

А вообще, прекращайте устраивать споры при встрече в какой-либо теме.
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
прекращайте устраивать споры при встрече в какой-либо теме
Ты хочешь меньше знать? Писать лишнее, а то и вовсе порой ненужное? Как попытка убить повторяющийся таймер обычным способом)
Если нечего сказать - не говори, а мы выясним истину) Как, например, R1KO хотел static почаще использовать, но я отговорил. :-D
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Как попытка убить повторяющийся таймер обычным способом)
Тогда меня интересовал не return plugin_stop, а в каком шаге алгоритма лучше вставить.
Додумался сам в итоге.

В этой теме меня интересовал не алгоритм построения функции, а сама функция, вызывающая событие на карте.

Мне вы новое своими спорами не открываете, вы просто мусолите одну фукнцию, и пытаетесь доказать друг-другу чей способ проще и лучше. А с return Plugin_Stop ты мне уже помогал в прошлый раз, спасибо за это, я еще с того раза запомнил, что просто так повторяющийся таймер не остановить. На века запомнил.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #18
Типа ты опытнее и мудрее?) А что свои мануалы даже не пишешь? И у тебя часто всё построено на "аля-я так решил", а потом сам сомневаешься, а так ли это, ибо документальной теорией не подтверждено.
Не собираюсь спорить кто опытнее но уж точно не буду основываться на словах этого еврея. Я не сомневаюсь, я делаю как считаю нужным, а если нахожу более приемлемое решения - изменяю на него.

Примеры - круть! Сразу написал return, как часть работы всей функции и говорит. Тут и сам компилятор "ругнётся", что не вписали.
Я не говорил что он ругнется. Он сделает это за тебя.

Plugin_Continue сделает, он по умолчанию. Это тоже самое, что недавно говорил:
PHP код:
HookEvent("player_team", Event_PlayerTeam, EventHookMode_Post); 
и
PHP код:
HookEvent("player_team", Event_PlayerTeam); 
- одно и тоже. Компилятор сам выставит умолчание. Зачем же мудрить здесь?
Как бы это ты мудрил, я сразу сказал что просто можно спокойно опускать пост хук.


Как, например, R1KO хотел static почаще использовать, но я отговорил.
Я предложил, кто ж виноват что тебе жалко пару килобайт памяти, лучше же грузить проц.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #19
Оффтоп
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
ставить или пусть компилятор ставить
Определённо ставить... SM-овцы в своих плагинах ставят. Если в таймере есть условие if, то return Plugin_Stop, а если просто "одно приравнять к другому", то нет смысла.
В доках эта аналогия наблюдается.
Оффтоп
 
Последнее редактирование:
Сверху Снизу