Что делает данный скрипт? При покупке услуги в автодонате скрипт будет активировать игроку радужный физган который будет переливаться в цвета в стиле радуги !
Я подробно расписал как настроить и пользоваться данным скриптом!
Скрипт кидать в garrysmod/lua/autorun/server
Строчка для доната (/garrysmod/addons/igsmodification/lua/igs/settings/sh_additems.lua):
Раз на то пошло, я то-же чутка оптимизировал скрипт.
Алсо, ваша версия поломана - см новое название переменной на 33 строке и использование старого названия переменной на 34 строке.
Благодарю, серьор. Я действительно не тестировал скрипт после правок, поскольку нет возможности.
Главной моей целью было упрощение Think хука, чтобы тот не бегал по всем игрокам каждый Think, а только по тем, кто купил услугу. Таким образом при онлайне 120 человек придется делать 1-2 итерации по таблице вместо 120 каждый Think
То, что таблица заменена на GetNWBool лишило оптимизацию всей сути. С тем же успехом весь скрипт можно сделать в таком виде, убрав хуки:
Но опять же, суть моей оптимизации была как раз в разгрузке Think, который выходит тяжелым в оригинальном и твоем варианте
Моя логика такова:
вся нагрузка должна перекладываться на плечи клиента, сервер должен делать минимум вычислений.
в идеале конечно можно заменить gmod NW на igs NW тогда получиться скомбинировать мою оптимизацию с логикой на клиенте и вашу с разгрузкой Think.
-- UID итема в sh_additems, при активации которого игроку будет выдан цветной физган
local PHYSGUN_ITEM_UID = "rainbowphysgun"
if SERVER then
hook.Add("IGS.PlayerPurchasesLoaded", PHYSGUN_ITEM_UID, function(pl)
if pl:HasPurchase(PHYSGUN_ITEM_UID) then
pl:SetNWBool(PHYSGUN_ITEM_UID, true)
end
end)
hook.Add("IGS.PlayerActivatedItem", PHYSGUN_ITEM_UID, function(pl, ITEM)
if ITEM:UID() == PHYSGUN_ITEM_UID then
pl:SetNWBool(PHYSGUN_ITEM_UID, true)
end
end)
return
end
local div = 255 / 1
local col, vec_col
hook.Add("Think", PHYSGUN_ITEM_UID, function()
col = HSVToColor(CurTime() % 6 * 150, 1, 1)
vec_col = Vector(col.r * div, col.g * div, col.b * div)
for i, ply in ipairs(player.GetHumans()) do
if ply:GetNWBool(PHYSGUN_ITEM_UID, false) then
ply:SetWeaponColor(vec_col)
end
end
end)