Перейти к содержимому


Фотография

Разблокировка триггеров лифта


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 Goldfish

Goldfish

    Пользователь

  • Пользователь
  • PipPipPip
  • 388 сообщений

Отправлено 23 Февраль 2021 - 12:31

Приветствую.
Почему при разблокировке кнопки лифта и после активации кнопки, лифт не едет? Баг встречается когда на сервере больше 4-5 человек

вот так разблокировываю

if (StrEqual(mapName, "c8m4_interior", false)) 
{
PrintToChatAll("AcceptEntityInput elevator_button unlock");
Entity = FindEntityWildcard("elevator_button");
if (IsValidEntity(Entity)) AcceptEntityInput(Entity, "unlock", client);

}

...
	
int FindEntityWildcard(const char [] Name, const int Start = -1)
{
	// To hold the name taken from the entity being checked.
	char TempName[64];
	
	// First, find the "*" wildcard. If it's present, we truncate the search limit.
	int StringLimit = StrContains(Name, "*");
	
	// If no match is found, reset to the entire length, to include the terminating NULL.
	// There's a sanity check, in case the entity name is malformed.
	if (StringLimit < 0)
		StringLimit = (strlen(Name) < 64) ? strlen(Name) + 1 : 64;
	
	// Go through the entries from the start until the limit is reached.
	for (int i = Start + 1; i < MaxEntities ; i++)
	{
		// If the entity is invalid, skip to the next entity.
		if (!IsValidEntity(i))
			continue;
		
		// Get the entity's name to compare.
		GetEntPropString(i, Prop_Data, "m_iName", TempName, 64);
		
		// We use strncmp since it allows to limit the length of the search,
		// in case the "*" is present.
		if (strncmp(Name, TempName, StringLimit, false) == 0)
			// We have a match. Stop processing and return the match.
			return i;
	}
	
	// No match. Return the invalid reference.
	return INVALID_ENT_REFERENCE;
}

даже пробовал вручную запустить триггеры лифта данным плагином https://forums.allie...d.php?p=2585432
все равно не едет.
в чем может быть проблема?


Сообщение отредактировал Goldfish: 23 Февраль 2021 - 12:34


#2 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 23 Февраль 2021 - 12:41

Приветствую.
Почему при разблокировке кнопки лифта и после активации кнопки, лифт не едет? Баг встречается когда на сервере больше 4-5 человек

вот так разблокировываю

if (StrEqual(mapName, "c8m4_interior", false)) 
{
PrintToChatAll("AcceptEntityInput elevator_button unlock");
Entity = FindEntityWildcard("elevator_button");
if (IsValidEntity(Entity)) AcceptEntityInput(Entity, "unlock", client);

}

...
	
int FindEntityWildcard(const char [] Name, const int Start = -1)
{
	// To hold the name taken from the entity being checked.
	char TempName[64];
	
	// First, find the "*" wildcard. If it's present, we truncate the search limit.
	int StringLimit = StrContains(Name, "*");
	
	// If no match is found, reset to the entire length, to include the terminating NULL.
	// There's a sanity check, in case the entity name is malformed.
	if (StringLimit < 0)
		StringLimit = (strlen(Name) < 64) ? strlen(Name) + 1 : 64;
	
	// Go through the entries from the start until the limit is reached.
	for (int i = Start + 1; i < MaxEntities ; i++)
	{
		// If the entity is invalid, skip to the next entity.
		if (!IsValidEntity(i))
			continue;
		
		// Get the entity's name to compare.
		GetEntPropString(i, Prop_Data, "m_iName", TempName, 64);
		
		// We use strncmp since it allows to limit the length of the search,
		// in case the "*" is present.
		if (strncmp(Name, TempName, StringLimit, false) == 0)
			// We have a match. Stop processing and return the match.
			return i;
	}
	
	// No match. Return the invalid reference.
	return INVALID_ENT_REFERENCE;
}

даже пробовал вручную запустить триггеры лифта данным плагином https://forums.allie...d.php?p=2585432
все равно не едет.
в чем может быть проблема?

Ну смотри - раз ты ее разблокируешь, значит чем-то до этого блокируешь, если я правильно все понимаю. Кода блокировки тут нет. А, скорее всего, там и кроется ошибка.


  • Goldfish это нравится

#3 Goldfish

Goldfish

    Пользователь

  • Пользователь
  • PipPipPip
  • 388 сообщений

Отправлено 23 Февраль 2021 - 12:46

Ну смотри - раз ты ее разблокируешь, значит чем-то до этого блокируешь, если я правильно все понимаю. Кода блокировки тут нет. А, скорее всего, там и кроется ошибка.

нет, я только пытаюсь разблокировать., на карте есть триггеры, которые блокируют кнопку, когда не все игроки в зоне триггера, и разблокирует, когда все игроки вошли в лифт

{
"model" "*40"
"wait" "1"
"StartDisabled" "0"
"spawnflags" "1"
"origin" "13432 15273.8 484.54"
"entireteam" "2"
"allowincap" "1"
"classname" "trigger_multiple"
"hammerid" "1199298"
"OnEntireTeamStartTouch" "elevator_buttonUnlock0-1"
"OnEntireTeamEndTouch" "elevator_buttonLock0-1"
}

суть в том, что когда игроков до 4 примерно, то все разбокировывается   нормально, но когда игрков больше начинаются проблемы, пока не понял изза чего



#4 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 23 Февраль 2021 - 12:51

нет, я только пытаюсь разблокировать., на карте есть триггеры, которые блокируют кнопку, когда не все игроки в зоне триггера, и разблокирует, когда все игроки вошли в лифт

{
"model" "*40"
"wait" "1"
"StartDisabled" "0"
"spawnflags" "1"
"origin" "13432 15273.8 484.54"
"entireteam" "2"
"allowincap" "1"
"classname" "trigger_multiple"
"hammerid" "1199298"
"OnEntireTeamStartTouch" "elevator_buttonUnlock0-1"
"OnEntireTeamEndTouch" "elevator_buttonLock0-1"
}

суть в том, что когда игроков до 4 примерно, то все разбокировывается   нормально, но когда игрков больше начинаются проблемы, пока не понял изза чего

По стрипперу мне тяжело подсказать будет. Он наверняка все сложнее блокирует, чем просто Lock-Unlock. Поэтому анлок и не помогает в твоем коде. Но, если ты говоришь, что все работает, но из-за кол-ва игроков глючит, то посмею предположить, что тут роль может играть даже то, что есть одинаковые персонажи. Опять же нет кода как идет проверка игроков в зоне и т.д.



#5 Goldfish

Goldfish

    Пользователь

  • Пользователь
  • PipPipPip
  • 388 сообщений

Отправлено 23 Февраль 2021 - 23:23

вот пример, плагин разблокирывает триггер лифта через 30 секунд и игроки, которые тормозят игру останутся сзади

немного переписал в один плагин

 

Скрытый текст

 

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


Сообщение отредактировал Goldfish: 23 Февраль 2021 - 23:26


#6 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 24 Февраль 2021 - 19:48

if (StrEqual(mapName, "c8m4_interior", false)) 
{
    PrintToChatAll("AcceptEntityInput elevator_button unlock");
    Entity = FindEntityWildcard("elevator_button");
    if (IsValidEntity(Entity)) AcceptEntityInput(Entity, "unlock", client);
}

Вроде все там правильно. Осталось понять как ты используешь вот этот кусок кода, когда пытаешься разблокировать.



#7 Goldfish

Goldfish

    Пользователь

  • Пользователь
  • PipPipPip
  • 388 сообщений

Отправлено 24 Февраль 2021 - 20:41

if (StrEqual(mapName, "c8m4_interior", false)) 
{
    PrintToChatAll("AcceptEntityInput elevator_button unlock");
    Entity = FindEntityWildcard("elevator_button");
    if (IsValidEntity(Entity)) AcceptEntityInput(Entity, "unlock", client);
}

Вроде все там правильно. Осталось понять как ты используешь вот этот кусок кода, когда пытаешься разблокировать.

 

после эвента Event_button_used, при неудачной активации кнопки лифта, срабатывает таймер и в конце вызывается функция usetrigger() в которой идет разблокировка, правда сейчас думаю, важно ли чтобы клиент от которого выполняется разблокировка триггера был в зоне триггера

(AcceptEntityInput(Entity, "unlock", client);),

 

сейчас там рандом клиент ищется 

if (client == 0) client = anyClient();


Сообщение отредактировал Goldfish: 24 Февраль 2021 - 20:42



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных