Znalazłem nowy system więzienia w talkactions i chciałbym aby ujrzał światło dzienne więc przedstawiam ten projekt
Zasada działania? np. Kod:
!kara "nick, za co
Mamy do dyspozycji łatwą do edycji tabelę kar Najpierw skrypt a potem wytłumaczę.
Tworzymy plik jail.lua o treści: Kod:
Spoiler:local system = { -- Kary ["przeklinanie"] = {minuty = 10, obrazenia = false}, ["wyzywanie"] = {minuty = 5, obrazenia = true}, ["kradziez"] = {minuty = 25, obrazenia = true}, ["atakowanie potwora"] = {minuty = 20, obrazenia = false}, ["oszukiwanie"] = {minuty = 20, obrazenia = false} }
local cele = { -- Pozycje cel {x=1076,y=1120,z=7}, {x=1089,y=1113,z=7} }
-- Pozycja temple local temple = {x=1080,y=1120,z=6}
-- Mnożniki dla obrażeń lvl * mnożnik local mnozniki = {4,4.6}
local function uwolnij(x) doTeleportThing(x.cid, temple) doSendMagicEffect(temple, CONST_ME_TELEPORT) doPlayerSendTextMessage(x.cid,22,'Wychodzisz na wolnosc! Uwazaj na siebie!') setPlayerStorageValue(x.cid, 7000, 0) print('Gracz '..getPlayerName(x.cid)..' wychodzi na wolnosc!') return 1 end
local function kara(x) if(os.time() < getPlayerStorageValue(x.cid, 7000)) then local lvl = getPlayerLevel(x.cid) doTargetCombatHealth(0, x.cid, COMBAT_PHYSICALDAMAGE, -(mnozniki[1]*lvl), -(mnozniki[2]*lvl), CONST_ME_NONE) doPlayerSendTextMessage(x.cid,22,'Lepiej dbac o siebie, kolejny cios moze byc mocniejszy!') local x = {cid = x.cid} return addEvent(kara, 30*1000, x) else return 1 end end
function onSay(cid, words, param) if (words == '!kara') and (param ~= "") then local szukaj = string.find(param, ',') local kogo = string.sub(param, 0, szukaj-1) local za_co = string.sub(param, szukaj+2, string.len(param)) if (system[za_co] ~= nil) then if (getPlayerAccess(cid) >= 3) then local kto = getPlayerByName(kogo) local gdzie = math.random(1, table.maxn(cele)) local x = {cid = kto} addEvent(uwolnij, system[za_co].minuty*60*1000, x) doTeleportThing(kto, cele[gdzie]) doSendMagicEffect(getPlayerPosition(kto), CONST_ME_POFF) doSendMagicEffect(cele[gdzie], CONST_ME_TELEPORT) print('Gracz '..getPlayerName(cid)..' wsadzil gracza '..kogo..' do wiezienia na '..system[za_co].minuty..' minut!') doPlayerSendTextMessage(kto,22,'Zostales posadzony w wiezieniu przez gracza '..getPlayerName(cid)..' za '..za_co..' na '..system[za_co].minuty..' minut!') if (system[za_co].obrazenia ~= false) then local x = {cid = kto} doPlayerRemoveItem(kto, 2173, getPlayerItemCount(kto, 2173)) addEvent(kara, 15*1000, x) setPlayerStorageValue(kto, 7000, os.time() + system[za_co].minuty * 60) doPlayerSendTextMessage(kto,22,'Zagramy w pewna gre, reguly sa proste, wygraj albo zgin!') end else doPlayerSendTextMessage(cid,22,'Brak wymaganego poziomu uprawnien!') end else doPlayerSendTextMessage(cid,22,'Niestety niema takiego wykroczenia w tabeli!') end end return 1 end
I do talkactions.xml dodajemy:
Spoiler: <talkaction words="!kara" script="jail.lua" />
Gdy napiszemy np.
Spoiler:
!kara "name, przeklinanie
Gracz name zostanie wrzucony do więzienia (do jednej z wylosowanych cel) i dodatkowo jeżeli przy karze jest obrażenia = true będą zadawane obrażenia temu graczowi.
Edycja tabeli z karami:
Spoiler:["przeklinanie"] = {minuty = 10, obrazenia = false},
przeklinanie - nazwa kary (za co siedzi) minuty - na ile minut siedzi obrażenia - czy mają być zadawane obrażenia (false/true)
Dodawanie cel, jest proste do tablicy cele dodajemy linijki: Kod:
{x=,y=,z=},
Oczywiście uzupełniając o współrzędne
Pozycja gdzie teleportuje gracza po odczekaniu kary: Kod:
Spoiler:local temple = {x=,y=,z=}
Nazwałem ją temple bo u mnie do temple leci gracz :P
Teraz mnożniki obrażeń:
Spoiler:
local mnozniki = {4,4.6}
Obrażenia są liczone tak: lvl * mnożnik
np. Kod:
lvl * 4
lub Kod:
lvl 4.6
I wartość jest losowana między jednym a drugim
Uwaga! W celach musi być strefa no-logout
Pozdrawiam.
Mam nadzieje ze sie spodoba
|