Перейти к содержанию

Эвент "Карты Таро"


Рекомендуемые сообщения

Создатель mrboob

Не правда. Он всего лишь изменил скрипт ~AnnieRuru~.

http://www.eathena.ws/board/index.php?showtopic=243825&view=findpost&p=1329191

  • Upvote 2
Ссылка на комментарий
Поделиться на другие сайты

Создатель mrboob

Не правда. Он всего лишь изменил скрипт ~AnnieRuru~.

http://www.eathena.ws/board/index.php?showtopic=243825&view=findpost&p=1329191

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

Изменено пользователем mrboob
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

А можно его сделать чтоб сам запускался а не активировал ГМ постоянно? Помогите сделать?

OnClock1300:

OnClock1500:

OnClock1700:

OnClock1900:

OnClock2200:

OnClock2328:

OnClock0028:

Время допишеш.

Изменено пользователем medlmen
  • Upvote 1
  • Downvote 1
Ссылка на комментарий
Поделиться на другие сайты

Спасибо большое. А еще вот такая ошибочка вылазиет подскажите что это? Только это не тот ивент.

[Warning]: NPC event parameter deprecated! Please use 'NPCNAME::OnEVENT' instead

of 'OnMobDead'.

[Debug]: Source (NPC): announce2 at guild_vs2-2 (0,0)

Ссылка на комментарий
Поделиться на другие сайты

Нашел баг:

Если игрок ливает с эвента - пишется "очередь (null)" и эвент виснет...

Есть идеи по решению проблемы?

Ссылка на комментарий
Поделиться на другие сайты

Перечитал скрипт и увидел в нем эти самые строчки...

while ( getarraysize(.aid) > 1 ) {
if (!isloggedin(.aid[.@i])){
deletearray .aid[.@i], 1;
set .@i, .@i -1;
}

Проверка на присутствие игрока есть..

Баг еще глубже чем казалось.

Ссылка на комментарий
Поделиться на другие сайты

эта часть скрипта проверяет похоже только 1 раз перед началом раунда,а если игрок выйдет в середине раунда,то эвент зависнет.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

появилось время, порылся глубже в проблеме:

Проверяет он не перед каждым раудном, а перед каждым игроком. Но в нем есть нахер не нужная строчка.

Строка

set .@i, .@i -1;

Что по сути она делает? Все портит(

Пример №1:

На эвенте зарегистрировалось 5 человек, массив (.aid) выглядит так:


0 Вова
1 Петя
2 Вася
3 Саша
4 Миша

Еще перед началом эвента выходит первый игрок - Вова(0).

Начинается эвент, скрипт проверяет строку массива .aid[.@i] первого игрока (который вышел), т.е. .aid[0].

Скрип понимает что игрок оффлайн, далее он делает:

deletearray .aid[.@i], 1;

(удаляет игрока из массива)

а далее (внимание)

set .@i, .@i -1;

отнимает от вашего .@i единицу.

От чего тому становится херово, ибо его значение становится -1. ( 0-1 = -1 )

После чего эмуль пишет:

[Warning]: script:getelementofarray: index out of range (-1)
[Debug]: Data: variable name='.aid' index=0

Ну и падает эвент.

Пример №2:

На эвенте зарегистрировалось 5 человек, массив (.aid) выглядит так:


0 Вова
1 Петя
2 Вася
3 Саша
4 Миша

Еще перед началом эвента выходят - Петя(1) и Вася(2).

Начинается эвент, скрипт проверяет строку массива .aid[.@i] первого игрока, т.е. .aid[0] - все ок.

Далее:

set .@i, .@i +1;

(.@i = 1)

Потом проверяет игрока .aid[1] - он оффлайн:

deletearray .aid[.@i], 1;

(удаляет игрока из массива)

далее:

set .@i, .@i -1;

(.@i = 0)

...

Потом скрипт повторяет все действия заного, так как .@i = 0. (еще раз бьет первого игрока, устанавливает .@i = 1)

Опять проверяет игрока .aid[1] (он тоже вышел) - игрока нет, поле пустое - (null)

Эвент пишет:

Очередь игрока (null)

и зависает.

Чтобы этого не происходило:

1. Надите:

announce "Регистрация закончена. Эвент начался.", 8;
while ( getarraysize(.aid) > 1 ) {
if (!isloggedin(.aid[.@i])){
deletearray .aid[.@i], 1;
set .@i, .@i -1;
}

2. Удалите:

set .@i, .@i -1;

3. Добавьте goto, должно получиться примерно так:

announce "Регистрация закончена. Эвент начался.", 8;
L_Start:
while ( getarraysize(.aid) > 1 ) {
if (!isloggedin(.aid[.@i])){
deletearray .aid[.@i], 1;
goto L_Start;
}

Теперь все ОК)

Изменено пользователем SemirLab
Ссылка на комментарий
Поделиться на другие сайты

goto в цикле зачем?

И да, так и задумано что проверка нон-стоп? может хотя бы задержку секундную поставить?

P.S.: после удаления из массива элемента я бы переместил на его место последний, чтобы isloggedin(.aid[.@i]) не вызывал ошибок

Added: А все, понял

Ссылка на комментарий
Поделиться на другие сайты

goto в цикле зачем?

И да, так и задумано что проверка нон-стоп? может хотя бы задержку секундную поставить?

P.S.: после удаления из массива элемента я бы переместил на его место последний, чтобы isloggedin(.aid[.@i]) не вызывал ошибок

Пример №2

Изменено пользователем SemirLab
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика