• Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами Публичной оферты Проекта 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
Помогите пожалуйста переписать скрипт,
Эта ссылка скрыта от группы "Гость" (группа пользователей, которые еще не прошли регистрацию или авторизацию на Проекте). Чтобы увидеть эту ссылку Вам требуется авторизоваться или пройти регистрацию на Проекте (зарегистрироваться).

Надо помочь переделать 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() по группам коллизии на
Эта ссылка скрыта от группы "Гость" (группа пользователей, которые еще не прошли регистрацию или авторизацию на Проекте). Чтобы увидеть эту ссылку Вам требуется авторизоваться или пройти регистрацию на Проекте (зарегистрироваться).
.
Попробуй тыкнуть 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;
 
Статус
В этой теме нельзя размещать новые ответы.
Главная Регистрация
Назад
Сверху