• Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами Публичной оферты Проекта NetZONA.org: https://netzona.org/help/public-offer/

  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами использования Ваших файлов cookie на Проекте NetZONA.org: https://netzona.org/help/cookies/

  • Приветствуем на сайте, Гость! Обязательно ознакомьтесь с Политикой конфиденциальности Проекта NetZONA.org: https://netzona.org/pages/privacy-policy/

  • Ответы на основные вопросы: https://netzona.org/threads/populjarnye-voprosy-i-otvety-na-nix.6122/

  • Приветствуем на сайте, Гость! Приобрести (купить) Информационную услугу (в том числе группу "Проверенный") на Проекте NetZONA.org: https://netzona.org/account/upgrades

Проблема Нужна помощь с изменением .lua скрипта

  • Автор темы Автор темы sss
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.

sss

Пользователь
Регистрация
21 Авг 2017
Сообщения
2
Реакции
0
Баллы
13
Возраст
25
Адрес
Austria
Помогите пожалуйста переписать скрипт,
https://www.dropbox.com/sh/6ktuf97o1p28np7/AAADwiwCreuRQOLkIb3FyGFja?dl=0
Надо помочь переделать rp_stove.
Сам скрипт работает следующим образом: "rp_flour" загружается в "rp_stove" и через 65 секунд из нее выходит 1 "rp_food".
Помогите изменить что бы было:"rp_flour" загружается в "rp_stove" и через 100 секунд надо подойти к ней нажать "E", и из нее выпадало случайным образом от 2 до 4 "rp_food".
заранее спасибо)
 
Как таковой, в данном скрипте весь реквест уже отписан.
Единственное, что нужно сделать — это накинуть использование объекта на клавишу «E».
В функцию инициализации нужно накинуть аргумент self.isDone, для будущего определения готовности объекта:
Код:
function ENT:Initialize()
    // ...
    self.isDone = false;      
end;

В функции использования объекта стоит накинуть проверку на self.isDone, где она уже и будет отвечать за готовность. Ежели готово, то и функция сработает.
Код:
function ENT:Use(activator)
    DarkRP.notify(activator, 0, 4, "Положите тесто для готовки");

    if (self.isDone) then
        self:SpawnFood();

        self.isDone = false; // That's it!

        DarkRP.notify(activator, 0, 4, "Ваш хлеб готов");
    end;
end;

Функцию соприкосновения с объектом стоит слегка изменить. Таймер изменим на 100 секунд, а саму функцию таймера перепилим под наши нужды:
** Ежели закинуть больше одного объекта в виде rp_flour, то могут возникнуть бестолковые багофичи. Эту часть стоит протестировать несколько раз.
Код:
function ENT:StartTouch(entity)
    local owner = self:GetOwner();
    if (IsValid(entity) and entity:GetClass() == "rp_flour" and self.count < 3) then
        entity:Remove();

        self.count = self.count + 1;
        timer.Simple(100, function()
            self.isDone = true; // That's it!

            self.count = self.count - 1;
        end);

    elseif (IsValid(entity) and entity:GetClass() == "rp_flour" and self.count >= 3) then
        DarkRP.notify(owner, 0, 4, "");
    end;
end;

Функция SpawnFood() сама по себе уже существует:
Код:
function ENT:SpawnFood()
    local owner = self:GetOwner();

    local entity = ents.Create("rp_food");
    local pos = self:GetPos();

    for i = 1, math.random(1, 4) do
        local entity = ents.Create("rp_food");
        entity:SetCollisionGroup(1);
        entity:SetPos(pos + Vector(-5, -5, 25));
        entity:Spawn();
        //DarkRP.notify(self.Owner, 0, 4, "Ваш хлеб готов")
    end;
end;

Будет ли это все дельце работать так, как надо — без понятия.
Правильно ли все отписано по реквесту — вряд ли.
 
Последнее редактирование:
Как таковой, в данном скрипте весь реквест уже отписан.
Единственное, что нужно сделать — это накинуть использование объекта на клавишу «E».
В функцию инициализации нужно накинуть аргумент self.isDone, для будущего определения готовности объекта:
Код:
function ENT:Initialize()
    // ...
    self.isDone = false;    
end;

В функции использования объекта стоит накинуть проверку на self.isDone, где она уже и будет отвечать за готовность. Ежели готово, то и функция сработает.
Код:
function ENT:Use(activator)
    DarkRP.notify(activator, 0, 4, "Положите тесто для готовки");

    if (self.isDone) then
        self:SpawnFood();

        self.isDone = false; // That's it!

        DarkRP.notify(activator, 0, 4, "Ваш хлеб готов");
    end;
end;

Функцию соприкосновения с объектом стоит слегка изменить. Таймер изменим на 100 секунд, а саму функцию таймера перепилим под наши нужды:
** Ежели закинуть больше одного объекта в виде rp_flour, то могут возникнуть бестолковые багофичи. Эту часть стоит протестировать несколько раз.
Код:
function ENT:StartTouch(entity)
    local owner = self:GetOwner();
    if (IsValid(entity) and entity:GetClass() == "rp_flour" and self.count < 3) then
        entity:Remove();

        self.count = self.count + 1;
        timer.Simple(100, function()
            self.isDone = true; // That's it!

            self.count = self.count - 1;
        end);

    elseif (IsValid(entity) and entity:GetClass() == "rp_flour" and self.count >= 3) then
        DarkRP.notify(owner, 0, 4, "");
    end;
end;

Функция SpawnFood() сама по себе уже существует:
Код:
function ENT:SpawnFood()
    local owner = self:GetOwner();

    local entity = ents.Create("rp_food");
    local pos = self:GetPos();

    for i = 1, math.random(1, 4) do
        local entity = ents.Create("rp_food");
        entity:SetCollisionGroup(1);
        entity:SetPos(pos + Vector(-5, -5, 25));
        entity:Spawn();
        //DarkRP.notify(self.Owner, 0, 4, "Ваш хлеб готов")
    end;
end;

Будет ли это все дельце работать так, как надо — без понятия.
Правильно ли все отписано по реквесту — вряд ли.

Все работает спасибо, только однин вопрос остался когда ставишь SetCollisionGroup(0) если спавнится более 1 то он разлетается во все стороны и дамажит всех, можно ли сделать так что бы после 1 остольные спавнились выше 1, то есть по типу лестницы 2 спавнится над 1, 3 над 2, и так далее?
 
...когда ставишь SetCollisionGroup(0) если спавнится более 1 то он разлетается во все стороны и дамажит всех, можно ли сделать так что бы после 1 остольные спавнились выше 1, то есть по типу лестницы 2 спавнится над 1, 3 над 2, и так далее?
Данного можно и не делать.
Задай SetCollisionGroup() по группам коллизии на Wiki.
Попробуй тыкнуть SetCollisionGroup(20), авось и прокатит.

UPD:
Если делать лестничный спаун объектов, то в функции SpawnFood() задай что-то по типу следующего:
Код:
function ENT:SpawnFood()
    local owner = self:GetOwner();

    local entity = ents.Create("rp_food");
    local pos = self:GetPos();

    for i = 1, math.random(1, 4) do
        local entity = ents.Create("rp_food");
        entity:SetCollisionGroup(1);
        entity:SetPos(pos + Vector(-5, -5, 25 + (i * 2)); // От тут произошли изменения.
        entity:Spawn();
        //DarkRP.notify(self.Owner, 0, 4, "Ваш хлеб готов")
    end;
end;
 
Статус
В этой теме нельзя размещать новые ответы.
Главная Регистрация
Назад
Сверху