Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2018, 12:38   #1
CyberJacks
Новичок
Джуниор
 
Регистрация: 09.08.2018
Сообщений: 1
Вопрос Помогите разобраться в принципе работы скрипта LUA

Здравствуйте, хочу установить на сервер новый аддон на рулетку, но не понимаю принцип генерации чисел. Прошу помогите!
Код:
AddCSLuaFile()

DEFINE_BASECLASS("casinokit_table")
ENT.Base = "casinokit_table"

ENT.SeatCount = 0

ENT.Model = "models/casinokit/roulette.mdl"

ENT.Spawnable = true
ENT.Category = "Casino Kit"
ENT.PrintName = "Roulette table"

ENT.GameClass = "Roulette"

function ENT:OnGameConfigReceived(key, value)
	if key == "minbet" then
		assert(type(value) == "number" and value > 0)
		self:SetMinBet(value)
	elseif key == "maxtotalbet" then
		assert(type(value) == "number" and value >= 0)
		self:SetMaxTotalBet(value)
	elseif key == "rollinterval" then
		assert(type(value) == "number" and (value == 0 or value >= 25))
		self:SetRollInterval(value)
	end
end

function ENT:SetupDataTables()
	BaseClass.SetupDataTables(self)

	self:NetworkVar("Bool", 0, "Rolling")
	self:NetworkVar("Float", 0, "LastRoll")
	self:NetworkVar("Float", 1, "RollInterval")
	self:NetworkVar("Int", 1, "MinBet")
	self:NetworkVar("Int", 2, "MaxTotalBet")
end

ENT.ROUL_INNER_RAD = 0.1
ENT.ROUL_INNER_HEIGHT = 0.15

ENT.ROUL_MID_HEIGHT = 0.15

ENT.ROUL_OUTER_RAD = 0.32
ENT.ROUL_OUTER_HEIGHT = 0.05

ENT.ROUL_BORDER_HEIGHT = 0.116
ENT.ROUL_TOTAL_RAD = 0.43 -- ~27 inch

ENT.ROUL_BALL_RAD = 0.021 -- 21mm

ENT.ROUL_BALL_MASS = 0.00374
ENT.ROUL_BALL_ROLLFRICTION_COEFFICIENT = 0.001
ENT.ROUL_BALL_ROLLSLIDEFRICTION_COEFFICIENT = 0.014

local roulSeq = {
	6, 21, 33, 16, 4, 23, 35, 14, 2, 0, 28, 9, 26, 30, 11, 7, 20,
	32, 17, 5, 22, 34, 15, 3, 24, 36, 13, 1, "00", 27, 10, 25, 29, 12, 8, 19, 31, 18,
}
local radPerNumber = math.pi*2 / #roulSeq

ENT.NumberSequence = roulSeq
ENT.RedNumbers = {1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36}

function ENT:GetNumberFromRad(rad)
	local index = math.floor((rad - radPerNumber/2) / radPerNumber)
	return self.NumberSequence[(index % #self.NumberSequence) + 1]
end

local wheelRotPerSec = 0.3
function ENT:WheelRotationAt(time)
	return time * wheelRotPerSec
end
function ENT:GetWheelAngle()
	return self:WheelRotationAt(CurTime())
end

function ENT:GetBallYFromRad(rad)
	return math.Remap(rad, self.ROUL_OUTER_RAD, self.ROUL_TOTAL_RAD, self.ROUL_OUTER_HEIGHT, self.ROUL_BORDER_HEIGHT - 0.03)
end

local acceleration = -0.6
function ENT:GetBallAngle(elapsed, strength)
	elapsed = self:ClampElapsed(elapsed, strength)
	local initialVelocity = strength
	local ballHorizDistance = initialVelocity*elapsed + 0.5*acceleration*elapsed^2
	return -(ballHorizDistance / self.ROUL_OUTER_RAD)
end

function ENT:GetBallStopTime(strength)
	return -strength / acceleration
end

function ENT:ClampElapsed(elapsed, strength)
	local ballHorizStopTime = self:GetBallStopTime(strength)
	local ballStopElapsed = 0
	if ballHorizStopTime < elapsed then
		return ballHorizStopTime, elapsed - ballHorizStopTime
	end
	return elapsed, 0
end

function ENT:GetBallNumber(start, strength)
	local elapsed, ballStopElapsed = self:ClampElapsed(CurTime() - start, strength)
	local ballHorizStopTime = -strength / acceleration
	local ballAng = -self:GetBallAngle(elapsed, strength)
	return self:GetNumberFromRad(self:WheelRotationAt(start + ballHorizStopTime) + -self:GetBallAngle(elapsed, strength))
end

function ENT:SimulateBall(start, strength)
	local elapsed, ballStopElapsed = self:ClampElapsed(CurTime() - start, strength)

	local initialVelocity = strength

	local ballAngle = self:GetBallAngle(elapsed, strength) % (math.pi*2)
	local ballHorizVelocity = initialVelocity + acceleration*elapsed

	-- convert to relative to wheel
	ballAngle = ballAngle + ballStopElapsed * wheelRotPerSec

	local ballRadius = self.ROUL_TOTAL_RAD - 0.02
	if ballHorizVelocity < 1 then
		local ballFrac = math.max(ballHorizVelocity, 0) ^ (1/1.5) -- note: normalize to 0-1 first if you edit

		ballRadius = math.Remap(ballFrac, 0, 1, self.ROUL_OUTER_RAD, self.ROUL_TOTAL_RAD - 0.02)
	end

	-- x flipped cuz texture is flipped. LAME but easieat hacky fix??
	return Vector(math.cos(ballAngle) * ballRadius, math.sin(ballAngle) * ballRadius, self:GetBallYFromRad(ballRadius) + 0.02)
end

function ENT:GetTimeToNextRoll()
	local interval = self:GetRollInterval()
	if interval == 0 then interval = 30 end

	return (interval - (CurTime() % interval))
end

local function withinNumbers(num)
	num = tonumber(num)
	return num and num >= 1 and num <= 36
end
function ENT:IsValidBet(id, param)
	if id == "single" then
		return withinNumbers(param)
	end

	if id == "split" then
		local split0, split1 = param:match("(%d+)%-(%d+)")
		if not withinNumbers(split0) or not withinNumbers(split1) then return false end

		local n0, n1 = tonumber(split0), tonumber(split1)
		if n0-3 == n1 then return true end -- left split
		if n0+1 == n1 and (n0 % 3) ~= 0 then return true end -- bottom split
		return false
	end

	if id == "street" then
		return withinNumbers(param) and (tonumber(param) - 1) % 3 == 0
	end

	if id == "corner" then
		return withinNumbers(param) and (tonumber(param) - 1) % 3 ~= 0 and tonumber(param) > 2
	end

	if id == "1-12" or id == "13-24" or id == "25-36" or id == "1-18" or id == "even" or
	   id == "red" or id == "black" or id == "odd" or id == "19-36" or id == "0" or
	   id == "00" or id == "column-1" or id == "column-2" or id == "column-3" then
		return true
	end

	return false
end
CyberJacks вне форума Ответить с цитированием
Старый 09.08.2018, 12:54   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,694
По умолчанию

А что вызывает затруднение?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с lua Dinictis Общие вопросы по программированию, компьютерный форум 4 19.03.2017 23:18
Помогите с синхронизацией работы скрипта lollollollol PHP 15 13.05.2014 22:49
Уменьшение скорости работы скрипта amdbodia PHP 3 16.01.2011 20:49
ajax индикатор работы скрипта ssdm JavaScript, Ajax 3 08.04.2010 17:04
помогите разобраться с заданием лабораторной работы tiger Помощь студентам 2 26.09.2009 00:38