Jump to content
Sign in to follow this  
Graf

[Скрипт]Воскрешение монстров

Recommended Posts

Что делает скрипт?

Цитата

Если описывать все это кратко, то скрипт позволяет избежать воскрешение боссов раньше времени после рестарта сервера. Призыв должен осуществляться добавлением новых ID и время воскрешения в переменные.

Что нужно сделать?

Цитата

Создать в папке "script" папку "test", а в ней создать еще одну папку "monster".

Как добавить новых монстров?

idMonster[последовательное число] = айди монстра
xMonster[idMonster[последовательное число]] = координата по x
yMonster[idMonster[последовательное число]] = координата по y
mapMonster[idMonster[последовательное число]] = "название серверной карты"
timeMonster[idMonster[последовательное число]] = время через которое появится (в секундах)

Начинаем добавлять

В variable.lua:

MonsterLogDir = "resource/script/test/monster/"
 
idMonster = {}
xMonster = {}
yMonster = {}
mapMonster = {}
timeMonster = {}
 
idMonster[1] = 1111
xMonster[idMonster[1]] = 100
yMonster[idMonster[1]] = 100
mapMonster[idMonster[1]] = "darkblue"
timeMonster[idMonster[1]] = 1800
 
idMonster[2] = 1112
xMonster[idMonster[2]] = 928
yMonster[idMonster[2]] = 239
mapMonster[idMonster[2]] = "garner2"
timeMonster[idMonster[2]] = 36000

В functions.lua:

function checkMonster()
   
    -- Проверяет файлы монстров и производит вычисление времени
   
    for i, k in ipairs(idMonster) do
        local getFile = io.open(MonsterLogDir..idMonster[i]..".txt", "r")
 
        if getFile == nil then
            -- Записывает нового монстра, если его не существует
            local writeFile = io.open(MonsterLogDir..idMonster[i]..".txt", "w")
            writeFile:write("0")
            writeFile:close()
        else
            local timeCheck = getFile:read()
            local NumbTimeCheck = tonumber(timeCheck)
           
            if NumbTimeCheck > 0 then
                -- Вычисление времени каждую секунду
                arim = NumbTimeCheck - 1
            end
 
            if timeCheck ~= "0" then
                -- Запись нового времени в файл монстра
                local writeFile = io.open(MonsterLogDir..idMonster[i]..".txt", "w")
                writeFile:write(arim)
                writeFile:close()
            else
                -- Призыв монстра монстра через переменную idMonster[i]
                CreateChaEx(idMonster[i], xMonster[i], yMonster[i], 145, 60, mapMonster[i])
            end
 
            getFile:close()
        end
    end
end
 
function deadMonster( dead )
 
    -- Вызывается при убийстве монстра и обновляет счетчик в файле
 
    local MonsterCha = TurnToCha ( dead )
    local MonsterID = GetChaTypeID( MonsterCha )
   
    local getFile = io.open(MonsterLogDir..MonsterID..".txt", "r")
   
    if getFile ~= nil then
        local timeCheck = getFile:read()
       
        if timeCheck == "0" then
            writeFile = io.open(MonsterLogDir..MonsterID..".txt", "w")
            writeFile:write(timeMonster[MonsterID])
            writeFile:close()
        end
       
        getFile:close()
    end
end

В конец функции cha_timer() из functions.lua:

checkMonster()

В конец функции GetExp_PKM() из exp_and_level.lua:

deadMonster( dead )

Scripted by Monsiure. Ссылка

Share this post


Link to post
Share on other sites

1) Работа с файлами тяжелая операция, она может понизить производительность сервера (FPS, в идеальном случае FPS = 20).

2) Сомнительное решение:

Цитата

В конец функции cha_timer() из functions.lua:

checkMonster()

 

Функция cha_timer() представляет собой таймер, который тикает раз в секунду. Вызывается эта функция для каждого игрока, активного монстра, NPC и прочих объектов (они передаются в нее первым параметром - role).

gsw.png

 

Как видно из скриншота выше, эта функция будет вызываться для 10436 объектов. То есть столько раз будет открываться файл на чтение и что-то там будет происходить. И все это в цикле. Не очень рационально. 

 

Да и сама ситуация сомнительная. Нормальный сервер перезагружается редко. Если и перезагружается, то желательно при минимальном онлайне, например, в среду ночью, когда все спят. И ради того, чтобы игроки не убили босса во второй раз (а если они и не собираются его убивать?), давать дополнительную нагрузку на сервер?

 

Кстати, насколько я помню, данная тема здесь уже обсуждалась


Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

×
×
  • Create New...