• Приветствуем на сайте, Гость! Обязательно ознакомьтесь с условиями и правилами Публичной оферты Проекта 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

Helix quests проблема с кодом

  • Автор темы Автор темы Vergjil
  • Дата начала Дата начала

Vergjil

Пользователь
Регистрация
29 Авг 2014
Сообщения
40
Реакции
0
Баллы
15
Возраст
37
Пол
Пытался переписать плагин для квестов с НС на Helix. В итоге оно заработало, НО по какой-то причине не может понять строчку "HasItem", при сдаче квеста . Я понимаю что что-то упускаю, но не могу понять что именно.



Итоговый код:


sh_quests

local QUEST = {}
QUEST.uniqueID = "grant"
QUEST.name = "Honeya Hideout's Problem"
QUEST.desc = "Get %s of %s for Honeya Hideout." -- If you don't know how it's working, Just check in sh_advhandler.lua in dialogue.
QUEST.quickRewards = {
currency = 100,
items = {
{ uid = "terminal", amount = 1, data = {} },
}
}

QUEST.randomItem = { --
{ uid = "garnit", min = 1, max = 1 },
}
function QUEST:GenerateData( player )
local tbl = {}
for i = 0, 0 do
local idat = table.Random( self.randomItem )
tbl[ idat.uid ] = math.random( idat.min, idat.max )
print( 'inserted '.. idat.uid )
end
return tbl
end

function QUEST:CanComplete( player, data )
for uid, num in pairs( data ) do
if !player:HasItem ( uid, num ) then
print( Format( "lack of %s of %s", num, uid ) )
return false
end
end
return true
end

function QUEST:RemoveQuestItem( player, data )
for uid, num in pairs( data ) do
player:UpdateInv( uid, -num )
end
end

function QUEST:PostReward( player, data )
print( 'PostReward')
return true
end

PLUGIN:RegisterQuest( QUEST.uniqueID, QUEST )



sh_plugin

local PLUGIN = PLUGIN
PLUGIN.name = "Quest/Journals."
PLUGIN.author = "Black Tea"
PLUGIN.desc = "For someone who want to make server automatic game."

PLUGIN.curQuests = {}
PLUGIN.quests = {}

PLUGIN.journal = true -- If journal is active, you can see what you're doing now.
PLUGIN.maxQuestsim = 2 -- The number of the quest that player can do simultaneously.

local entityMeta = FindMetaTable("Entity")
local playerMeta = FindMetaTable("Player")

function PLUGIN:RegisterQuest( str, data )
if self.quests[ str ] then
print( 'Sorry, ' .. str .. ' is already exists.' )
return false
else
self.quests[ str ] = data
return true
end
end
ix.util.Include("sh_quests.lua")

-- Journal data form
-- [ uid ] = data >> data is for randomized quest.
-- desc will do like desc = "%s and shit"
-- derma will do like AddDesc( ... )
-- unpack( table )
-- Register quests

function playerMeta:GetQuests()
return self:GetNetVar( "questAssigned", {} )
end

function playerMeta:HasQuest( str )
return self:GetQuests()[ str ]
end
function playerMeta:GetQuest( str )
return self:GetQuests()[ str ]
end

function playerMeta:AddQuest( str, data ) -- if this returns false, the quest queue is full.
local quests = self:GetQuests()
data = data or {}
if #quests == maxQuestsim then
return false -- max quests reached.
else
quests[ str ] = data
self:SetNetVar( "questAssigned", quests )
return true
end
end

function playerMeta:CanCompleteQuest( str, data )
local d_qst = PLUGIN:GetQuest( str )
return d_qst:CanComplete( self, data )
end

function playerMeta:RemoveQuest( str )
local quests = self:GetQuests()
if quests[ str ] then
quests[ str ] = nil
self:SetNetVar( "questAssigned", quests )
return true
else
return false
end
end

function playerMeta:GiveQuestReward( str )
-- simple reward
-- and some custion functions
-- ( self, questtbl )
local d_qst = PLUGIN:GetQuest( str )
local d_rwd = PLUGIN:GetQuestReward( str )
local qdat = self:GetQuest( str )

if d_qst and d_rwd then
for k, dt in pairs( d_rwd ) do
if k == "currency" then
self:GiveMoney( dt )
elseif k == "items" then
for _, data in pairs( dt ) do
self:UpdateInv( data.uid, data.amount, data.data or {} )
end
end
end
d_qst:RemoveQuestItem( self, qdat )
d_qst:PostReward( self, qdat )
end

end

function PLUGIN:GetQuests()
return self.quests
end

function PLUGIN:GetQuest( str )
return self.quests[ str ]
end

function PLUGIN:GetQuestReward( str )
return self.quests[ str ].quickRewards
end

function PLUGIN:PlayerDisconnected( player )
if player:GetQuests() then
curQuests[ player:SteamID() ] = player:GetQuests()
end
end
 

Вложения

  • 1673005361520.png
    1673005361520.png
    14.5 KB · Просмотры: 4
if !player:GetCharacter():HasItem( uid, num ) then будет работать
HasItem - мета персонажа, а не игрока
 
Ага. Поменялось. Спасибо. Теперь он выдает ошибку из инвентаря... Что ж. Буду искать проблему там.
 

Вложения

  • 1673009410298.png
    1673009410298.png
    18.8 KB · Просмотры: 4
if !player:GetCharacter():GetInventory():HasItem( uid, num ) then
Не-а. Тоже не работает. Могу я скинуть исходники? Потому что уже третий день в две каски бьемся над этим и все никак (а других плагинов на квесты найти не удается)
 
Не-а. Тоже не работает. Могу я скинуть исходники? Потому что уже третий день в две каски бьемся над этим и все никак (а других плагинов на квесты найти не удается)
Запарно уж очень. Я вижу ты и сам хз, откуда ошибка.
Сообщение автоматически объединено:

Могу лишь порекомендовать взять плагин на квесты отсюда.
Эта ссылка скрыта от группы "Гость" (группа пользователей, которые еще не прошли регистрацию или авторизацию на Проекте). Чтобы увидеть эту ссылку Вам требуется авторизоваться или пройти регистрацию на Проекте (зарегистрироваться).
Он уже переписан под хеликс.
 
Запарно уж очень. Я вижу ты и сам хз, откуда ошибка.
Сообщение автоматически объединено:

Могу лишь порекомендовать взять плагин на квесты отсюда.
Эта ссылка скрыта от группы "Гость" (группа пользователей, которые еще не прошли регистрацию или авторизацию на Проекте). Чтобы увидеть эту ссылку Вам требуется авторизоваться или пройти регистрацию на Проекте (зарегистрироваться).
Он уже переписан под хеликс.
Понял. Сейчас будем тестировать. Спасибо больше за помощь.
 
Главная Регистрация
Назад
Сверху