Online MUD игра АРДА

Общедоступные => Строительство и программы => Тема начата: Карина от 14.06.07, 18:17:34

Название: Как определить $n ?
Отправлено: Карина от 14.06.07, 18:17:34
В комнате А стоит чар.
Из комнаты Б в комнату А заходит неагрессивный моб.
Как ему напасть на чара?

Допустим, проверка mortsinarea покажет, что таки в комнате чар стоит,
но при этом $n остается неопределенной и mpkill $n не срабатывает.
Кроме того, неизвестно, сколько чаров стоит в комнате, если их несколько,
и непонятно на кого нападать.

Что делать?  ::)
Название: Re: Как определить $n ?
Отправлено: Maikroft от 14.06.07, 18:29:32
Песец. ;)

Цитировать
entry_prog 100

if isnpc($n)
mpkill $n

Проверяло. Все работает.


P.S. Или надо чтобы mob напал на какого-либо определенного человека? ;)
Название: Re: Как определить $n ?
Отправлено: mell от 14.06.07, 19:03:41
entry_prog 100

emote давит черного таракана как таракана!
mpadvance $n 2
c 'облако газа'
всплак
goto 10
say slayme

Название: Re: Как определить $n ?
Отправлено: Карина от 14.06.07, 19:29:34
Проверяло. Все работает.

Странно, у меня не работает.
И странный ты алгоритм вообще приводишь.
if isnpc($n) true если $n - моб.
А мне надо напасть на чара.

if ispc($n) тоже не срабатывает.

Срабатывает, если чар приходит в комнату к мобу.
А мне надо еще если моб приходит в комнату к чару, чтоб етот моб етого чара тюкнул.
Название: Re: Как определить $n ?
Отправлено: Maikroft от 14.06.07, 19:37:08
1. Вешаем entry_prog на mob'а. Программа будет срабатывать если mob войдет в другую комнату, в данном случае, ту, в которой находится $n.

2. if ispc($n). //Проверяем, если $n - игрок. В первом случае опечаталось, прошу прощения. ;)

3. mpkill $n. //Если проверка на $n прошла успешно, убиваем $n.

4. endif. //Конец.

Дней 5 назад писало подобную чушь, у меня все работало.


P.P.S.

Функция вызывается из move_char, отвечающее за передвижение в пространстве.
При передвижении выполняется последовательность отработки триггеров:
enrty_prog на моба (когда он передвигается).
enrty_prog на комнату.
greet_prog на моба (когда входят в его локацию).
greet_prog на предмет.

Триггер на моба выполняет функция mprog_entry_trigger.
Название: Re: Как определить $n ?
Отправлено: Alanna от 14.06.07, 20:10:53
Карина, тебе нужна переменная $r:
if isdefined($r)
  mpkill $r
endif
Правда, проверка isdefined в демо-версии пока отсутствует. Вместо нее можно попробовать проверку if mortcount(0)>0, хотя этот вариант хуже (не вдаваясь в подробности). Если неясно заранее, что будет значить $n, $r и т.п., можно ввести в программу для отладки строки типа mpecho N1 - $N1
mpecho R1 - $R1
Название: Re: Как определить $n ?
Отправлено: Maikroft от 14.06.07, 20:19:57
Цитировать
isdefined

В первый раз слышу о такой.

Цитировать
if mortcount(0)>0

Зачем?.. Переменная $r уже подразумевает под собой то, что в комнате находится хотя бы один игрок.


P.S. С переменной $r полностью согласно.
Название: Re: Как определить $n ?
Отправлено: Карина от 14.06.07, 20:32:38
О, $r я проглядела :)
Лучшим вариантом в моем случае будет

if mortsinarea($i)
  mpkill $r
endif

Но только mortsinarea($i) пока тоже в демке не работает: [*****] BUG: Unknown ifcheck :(
Название: Re: Как определить $n ?
Отправлено: Maikroft от 14.06.07, 20:36:07
Мда. Зачем все усложнять? ;)

 
Цитировать
mortinarea

проверка: есть ли в игровой зоне игрок с указанным именем (проверяет только смертных) [уровень игрока меньше 51].

Цитировать
$i

Выдает имя моба на котором висит программа, первое из списка в поле Name.


P.S. А вообще надоело смеяться. ;)
Название: Re: Как определить $n ?
Отправлено: Nurien от 15.07.07, 10:05:25
если я не ошибась - то на сайте арды был хелп по этому поводу, и если стоит у чара флаг агр - то велосипед изобретать ВООБЩЕ не нужно. а вот проверка по поводу >51 - это вообще жесть :) имма и так не убьешь :)
Название: Re: Как определить $n ?
Отправлено: Nurien от 15.07.07, 11:19:21
карина, нифига не въеду, нафига тебе это "если"? не проще $_ или как там в арде?