πŸ”₯ [IGS] Активация ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° с Π½ΡƒΠΆΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ

МоТно Π»ΠΈ силами Π°Π²Ρ‚ΠΎΠ΄ΠΎΠ½Π°Ρ‚Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π° ΠΊΠ°ΠΊΠΈ-Π»ΠΈΠ±ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°?
НапримСр:

Π•ΡΡ‚ΡŒ привилСгия β€œΠ—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ²Π΅Π½Ρ‚ Π½Π° сСрвСрС”
Π˜Π³Ρ€ΠΎΠΊ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ сСбС Π² ΠΈΠ½Π²Π΅Π½Ρ‚Π°Ρ€ΡŒ эту ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡŽ.
Когда Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ - Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ β€œΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€β€ названия ΠΈΠ²Π΅Π½Ρ‚Π° ΠΈΠ· Π±Π°Π·Ρ‹.
ЗапускаСтся Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΈΠ²Π΅Π½Ρ‚.

ВмСсто ΠΈΠ²Π΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ (тСлСпортация Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈΠ· списка, смСна профСссии ΠΏΠΎ Π²Ρ‹Π±ΠΎΡ€Ρƒ ΠΈ Ρ‚.ΠΏ.). Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΡƒΡ‡Ρƒ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ β€œΠ²Ρ‹Π±ΠΎΡ€ игрока”, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ, Π³Π΄Π΅ ΠΈΠ³Ρ€ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ сам Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ.

ΠšΡ‚ΠΎ-Ρ‚ΠΎ пытался Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅? Или ΠΏΠΈΡΠ°Ρ‚ΡŒ с нуля, прикручивая Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ этот интСрфСйс?

ΠŸΡ€ΠΈΠ²Π΅Ρ‚. Π­Ρ‚ΠΎ дСлаСтся посрСдством сторонних интСрфСйсов. ИдСя с ΠΈΠ²Π΅Π½Ρ‚Π°ΠΌΠΈ рСализуСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ (Π½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊ)

Π˜Π³Ρ€ΠΎΠΊ ΠΏΠΎΠΊΡƒΠΏΠ°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ β€œevent_request” с :SetTerm(1). Π’ SetOnActivate Π΅ΠΌΡƒ отправляСт ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, которая ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Π½ΡŽΡˆΠΊΡƒ с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ ΠΈΠ²Π΅Π½Ρ‚Π° (ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΌΠΎΠ΄Π°Π»ΠΊΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ Π΄ΠΎ Derma_StringRequest). Когда ΠΈΠ³Ρ€ΠΎΠΊ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΈΠ²Π΅Π½Ρ‚, Ρ‚ΠΎ выполняСтся pl:ConCommand("event_cmd"). event_cmd это сСрвСрная ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ происходит ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° pl:HasPurchase("event_request") ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Π½Π΅Π΄Π°Π²Π½Π΅Π΅ использованиС. НиТС псСвдокод ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ event_cmd

local recent_event_runs = {} -- sid > os.time()

concommand.Add("event_cmd", function(pl, _, args)
	local event_name = args[1]
	if not event_name or not EventExists(event_name) then
		pl:ChatPrint("Π’Π°ΠΊΠΎΠ³ΠΎ ΠΈΠ²Π΅Π½Ρ‚Π° Π½Π΅ сущСствуСт")
		return
	end

	if SomeEventActive() then
		pl:ChatPrint("Какой-Ρ‚ΠΎ ΠΈΠ²Π΅Π½Ρ‚ сСйчас Π°ΠΊΡ‚ΠΈΠ²Π΅Π½. ΠŸΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅, ΠΏΠΎΠΊΠ° закончится")
		return
	end

	-- Если Ρƒ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΈΠ²Π΅Π½Ρ‚
	if pl:HasPurchase("event_request") and
		-- Если ΠΈΠ³Ρ€ΠΎΠΊ Π½Π΅ запускал Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ²Π΅Π½Ρ‚ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° рСстарта сСрвСра
		not recent_event_runs[pl:SteamID()] then

		StartEvent(event_name)

		-- записываСм, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ³Ρ€ΠΎΠΊ Π½Π΅ ΠΌΠΎΠ³ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ²Π΅Π½Ρ‚ снова Π΄ΠΎ рСстарта сСрвСра
		-- (Вакая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ это Ρ†Π΅Π½Π° простой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΏΠ°Ρ€Ρƒ строк)
		recent_event_runs[pl:SteamID()] = true
	end
end)

Π“ΠΎΡ€ΠΆΡƒΡΡŒ своСй ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ

2 Π»Π°ΠΉΠΊΠ°

Π’ΠΎΠΎΠ±Ρ‰Π΅, ΠΊΡ€ΡƒΡ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ унивСрсифицируСт Ρ‚Π²ΠΎΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΏΠΎΠ΄ Ρ€Π°Π·Π½Ρ‹Π΅ потрСбности. Π’Ρƒ ΠΆΠ΅ Ρ‚Π΅Π»Π΅ΠΏΠΎΡ€Ρ‚Π°Ρ†ΠΈΡŽ

Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ интСрфСйс Π²Ρ‹Π±ΠΎΡ€Π° Π΄ΠΎΠΏΠΈΠ»ΠΈΡ‚ΡŒ ΠΈ Π² ΠΈΡ‚Π΅ΠΌΠ°Ρ… Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚ΠΈΠΏΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ

ITEM:SetChoices({
	["Π—ΠΎΠΌΠ±ΠΈ ΠΈΠ²Π΅Π½Ρ‚"] = function()
		RunEvent("zombie")
	end,
	["Π—ΠΎΠ»ΠΎΡ‚ΠΎΠΉ доТдь :)"] = function()
		RunEvent("golden_rain")
	end
})

ΠŸΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для этого