Я пытался понять это некоторое время, но боюсь, что не вижу полного решения быстро, и теперь мне нужен свежий взгляд, чтобы выполнить то, что мне нужно.
У меня есть очень специфический сценарий для MUD, в который я играю, чтобы помочь мне различать мобов и игроков, когда они находятся в комнате. Сам скрипт работает, но теперь я хочу добавить новый элемент, который будет проверять, находятся ли мои одногруппники в одной комнате. Это то, что у меня есть до сих пор:
function strends(s)
if s:match("%u%w+ is here%.") or s:match("%u%w+ is fighting .-%.") or s:match("%u%w+ is sleeping here%.") then
return true
else
return false
end
end
Это отлично работает — он проверяет, есть ли в комнате имя в верхнем регистре, и возвращает информацию по запросу.
У меня есть таблица моих товарищей по группе, хотя мне может быть проще сделать это в виде строки и выполнить string.find. Проблема, с которой я сталкиваюсь, заключается в том, что она подходит для каждого из сценариев:
- Вернуть true, если в комнате есть игроки не из моей группы.
- Верните true, если это только игроки вне моей группы.
- Вернуть false, если кроме меня в комнате никого нет.
В первом сценарии он ДОЛЖЕН вернуть true, даже если в моей группе есть люди, а также люди вне моей группы. Но мои знания Lua недостаточно обширны, чтобы я мог решить эту проблему. Причина неначала string.matches заключается в том, что перед конкретной строкой может быть xx символов. Как мне подойти к этому или что я должен делать, чтобы достичь своей цели?
Редактировать: Исправлен сценарий 2, потому что произошла ошибка. Вот что обычно приходит при осмотре комнаты:
Сценарий 1:
(R) NonGroupMate is sleeping here.
(W)(R)(T) Groupmate is here.
Ожидаемый результат?
return true -- the function checks if there are people outside my group in the room.
Сценарий 2:
(D)(W) NonGroupMate is fighting a mob!
(T)(W) NonGroupMateTwo is here.
Ожидаемый результат?
return true
Сценарий 3:
(T) GroupMate is here.
(W) GroupMateTwo is sleeping here.
GroupMateThree is fighting a mob!
Ожидаемый результат?
return false
Я надеюсь, что это поможет немного прояснить ситуацию. Если вам нужно больше, пожалуйста, дайте мне знать.
Дополнительные разъяснения
Я не имел в виду какое-то недопонимание. Я думал, что все вышеперечисленное было необходимо, но я попытаюсь сломать его.
Когда я набираю «look» в MUD, я вижу что-то похожее на следующее:
Room name
Room Desc
[ Exits: <exits> ]
NameOne is here.
(G) NameTwo is here.
(R)(W) NameThree is sleeping here.
(W) NameFour is fighting a mob.
У меня уже есть триггеры для сопоставления элементов сразу после [ Exits: ], и триггер срабатывает без проблем. Он оценивает каждую строку, как и предполагалось, и пропускает ее через функцию strends()
.
Проблема, которую я пытаюсь решить, заключается в создании функции, в которой она оценивает строку и определяет, находится ли имя игрока в моей группе или нет. Если они ЕСТЬ в моей группе, strends()
должно вернуть false
(поскольку strends()
возвращает информацию о том, есть ли в комнате игроки, которых мне следует избегать). Если они НЕ в моей группе, то нужно вернуть true
.
Вот что мне трудно понять; как мне создать функцию для этого? Что бы я действительно хотел, чтобы функция делала, так это то, что когда она определяет, что игрок, не входящий в группу, находится в комнате, она ломается и игнорирует все другие результаты. Я думаю, что для того, чтобы это произошло, мне нужно будет ввести их в таблицу и выполнить итерацию, чтобы я мог сломаться в любой момент. То, что я /могу/ в итоге сделать, это настроить условную переменную, которая в начале устанавливается в false, а при установке в true всегда остается истинной.
Теперь это яснее? Если нет, то я не уверен, что еще я могу добавить к этому.
Обновить
Вывод look не является одной строкой. По сути, каждая строка обрабатывается индивидуально, начиная с персонажей в комнате. Например:
NameOne is here. -- This is processed by itself, gets passed through strends.
NameTwo is sleeping here. -- This is also processed through strends, by itself.
NameThree is here. -- Yet again it's processed individually through strends.
Я мог бы попытаться превратить все это в таблицу, но код для запуска в конечном итоге станет беспорядочным.
(R) NonGroupMate is sleeping here.
и(W)(R)(T) Groupmate is here.
хранятся в двух строках или в одной строке? - person Yu Hao   schedule 09.05.2015