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

SemirLab

Проверенные
  • Постов

    198
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Сообщения, опубликованные SemirLab

  1. Юзал, Правда не видел смысла в спаме сообщениями в общий. поэтому сделал waitingroom с кол-вом hp. Не помню точно, многое переписывал, но за эвент спасибо) хз как сам не допер)

    ЗЫ. Какой смысл в накладываемых статусах? Почему исключена кома? (инстант-килл?)

  2. Появилась необходимость присвоить игрокам перманентные бонусы в зависимости от аккаунт-переменной (##).

    Пример:

    Если ##TEST = 1, то давать к примеру 20% по деми-хуманам.

    Если ##TEST = 2, то 20% от демихуманов и тд.

    Если меняется значение переменной - меняется и бонус.

    Если переменная равна 0 - никакой бонус не присваивается.

    Пробовал выдавать бонусы типо bStr и тд, через OnPCLoginEvent, толку нет.

    Помогите, пожалуйста, реализовать)

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

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

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

    Пример №2

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

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

    Строка

    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;
    }

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

  5. 2600,WALKING_TREASURE,Walking Treasure,Walking Treasure,99,300000,0,0,0,0,0,0,50,70,1,1,1,1,1,1,0,0,2,0,60,0x00003885,85,0,0,0,0,0,0,,0,,0,,12103,10000,7227,10000,20050,100,20051,100,20052,100,20053,100,20054,100,20055,100,674,100,0,

    Используется спрайт моба Ancient Mimic.

    Все так же, азурю моба - падает сервер.

    Если вам необходима дополнительная информация - спрашивайте, напишу, что нужно)

  6. Есть кастомный моб (к слову, ID - 2600). Моб представляет собой просто мешок с сокровищами, который не умеет атаковать. Используется спрайт Ancient Mimic.

    Проблема в том, что при убийстве его азурой (только его и только ей) падает мап сервер Оо

    Заметил зависимость: если после азуры сразу переместить персонажа - шанс на падение сервера крайне мал. Если ударить азуру и больше ничего не трогать - 100% падает мап сервер и спамит ошибкой:

    WFIFOSET: Maximum write buffer size for client connection...

    Помогите, пожалуйста, с решением.

  7. Вместо гоуту можно сделать так:

    if(getmapusers("guild_vs1.gat") >= 100 ) { next; mes "[^0000FFАрена^000000]"; mes "Извини, на этой арене нет места..."; close; }

    Это конечно лишний код.. но и goto не дело. Думаю для четырех проверок можно и это поюзать, пока более внятное что-то не напишешь)

  8. Работа за деньгу, есесно)

    Создание красоных вещей при заточке, тоесть +7 красной становится +8 зеленой +8 желтой и тд.

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

  9. Да там патч объемный получится к тому-же, реализовал уже через диалог с нпц.

    Более информативно получилось с суммой выигрыша\проигрыша, ставками на бонус и тд.

    Генератор искал еще пару дней назад, ничего путного...

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