What's new

Actions [8.x]Jeden skrypt na wszystkie specjalne drzwi od levela + dodatkowe funkcje

Status
Not open for further replies.

Gandhi

Active User
Joined
Aug 7, 2013
Messages
80
Reaction score
19
Cze??!

Odpowiadaj?c na temat Madajaszka pomy?la?em, ?e podziel? si? swoim ma?ym systemikiem, kt?ry z powodzeniem wykorzystuj? na swoim projekcie.

G??wnym jego zastosowaniem s? przede wszystkim bramki levelowe, kt?re teleportuj? na drug? stron? drzwi bez ich otwierania. Posiada mo?liwo?? ustawienia minimalnego i maksymalnego levelu gracza, kt?rego przepu?ci, tak?e dodatkow? funkcj? sprawdzania, czy gracz ma czaszk? (je?li ma czaszk? bia??, czerwon? lub czarn?, to nie przepuszcza gracza - przepuszcza za to graczy z party i zielon? czaszk?, na czym niekt?re skrypty si? zaginaj?), tak?e ma wbudowane sprawdzanie, czy w danym terenie jest potw?r (przydatne do quest?w - je?li skrypt znajdzie w danym zasi?gu ?ywego potwora, kt?ry nie jest summonem, to drzwi nie przepuszcz? nikogo, dop?ki potw?r nie zostanie zabity - UWAGA: skrypt sprawdza niezale?nie od kierunku, tak wi?c je?li tymi samymi drzwiami idziesz gdzie? i wracasz, a potw?r si? zrespi, to utkniesz! Mi nie by?a potrzebna taka mo?liwo??).

Mo?na ustawi? drzwi na unique id oraz action id.

do data/actions/scripts/doorlevel.lua
[lua]
local config = {
uid = {
-- [2505] = {maxlv = 900},
-- [55509] = {minlv = 35000},
-- [55510] = {minlv = 35000},
},
aid = {
-- [1110] = {minlv = 25000},
-- [55400] = {minlv = 35000, pzBlock = true},
-- [55401] = {minlv = 35000, killAll = {{-4, -8}, {1, -1}}}
}
}

function onUse(cid, item, frompos, item2, topos)
local door = config.uid[item.uid]
if(not door) then
door = config.aid[item.actionid]
if(not door) then
return false
end
end
local level, pos = getPlayerLevel(cid), getCreaturePosition(cid)
if(door.maxlv and level > door.maxlv) then
doCreatureSay(cid, "You have too big level to pass this doors.", TALKTYPE_ORANGE_1)
doSendMagicEffect(pos, CONST_ME_POFF)
return true
end
if(door.minlv and door.minlv > level) then
doCreatureSay(cid, "You need "..door.minlv.." level to pass this doors.", TALKTYPE_ORANGE_1)
doSendMagicEffect(pos, CONST_ME_POFF)
return true
end
if(door.pzBlock and isInArray({SKULL_WHITE, SKULL_RED, SKULL_BLACK}, getCreatureSkull(cid))) then
doCreatureSay(cid, "You can't go though this doors with skull.", TALKTYPE_ORANGE_1)
doSendMagicEffect(pos, CONST_ME_POFF)
return true
end
if(door.killAll ~= nil) then
if(type(door.killAll[1]) == 'table') then
for x = topos.x + door.killAll[1][1], topos.x + door.killAll[2][1] do
for y = topos.y + door.killAll[1][2], topos.y + door.killAll[2][2] do
local tempos = {x=x, y=y, z=topos.z,stackpos=253}
local thing = getThingfromPos(tempos)
if(thing.uid > 0 and isMonster(thing.uid) and not getCreatureMaster(thing.uid)) then
doCreatureSay(cid, "You must kill all monsters in this room!", TALKTYPE_ORANGE_1)
doSendMagicEffect(pos, CONST_ME_POFF)
return true
end
end
end
--else -- je?li nie tabela z topLeft, bottomRight, to mo?e by? zasi?g jako liczba, kt?r? mo?na wykorzysta? do getSpectators
-- nie mia?em potrzeby pisa? takiego kodu, dlatego tutaj jest puste miejsce, aczkolwiek jest mo?liwo?? doda?

end
end
if(pos.x == topos.x) then
if(pos.y < topos.y) then
pos.y = topos.y + 1
else
pos.y = topos.y - 1
end
elseif(pos.y == topos.y) then
if(pos.x < topos.x) then
pos.x = topos.x + 1
else
pos.x = topos.x - 1
end
else
doCreatureSay(cid, "Stand opposite to the doors.", TALKTYPE_ORANGE_1)
doSendMagicEffect(pos, CONST_ME_POFF)
return true
end
doTeleportThing(cid, pos)
doSendMagicEffect(topos, CONST_ME_MAGIC_BLUE)
return true
end
[/lua]

do actions.xml dodajesz odpowiedni? linijk?, je?li twoje drzwi maj? unique id, to:
[xml]<action uid="2505" event="script" value="doorlevel.lua"/>[/xml]
a je?li actionid to:
[xml]<action actionid="55400" event="script" value="doorlevel.lua"/>[/xml]
gdzie w dw?ch powy?szych przyk?adasz liczby s? przyk?adowe, i musisz poda? odpowiednio w?asne.

A teraz konfiguracja: Drzwi z uniqueid dodajesz do tabeli config.uid, a z actionid dodajesz do config.aid.
Reszta konfiguracji: [lua]
[action/unique id] = {
minlv = minimalny_level, -- jesli ustawisz, jako liczbe i gracz ma mniejszy niz podany level to nie zostanie przepuszczony przez drzwi. Je?li ustawisz jako false lub nil, to sprawdzanie minimalnego levelu b?dzie ignorowane
maxlv = maksymalny_level, -- jesli ustawisz, jako liczbe i gracz ma wiekszy niz podany level to nie zostanie przepuszczony przez drzwi. Je?li ustawisz jako false lub nil, to sprawdzanie maksymalnego levelu b?dzie ignorowane
pzBlock = czy_sprawdzac_czaszke, -- jesli ustawisz jako warto?? logiczn? true, a gracz b?dzie posiada? bia??, czarn? lub czerwon? czaszk?, nie zostanie przepuszczony
killAll = { -- sprawdzanie potwor?w w danym zasi?gu - je?li w tym zasi?gu znajdzie si? jaki? potw?r, kt?ry nie b?dzie summonem, wtedy gracz nie zostanie przepuszczony. Ustaw false / nil / w og?le nie ustawiaj, aby nie sprawdza? ?ywych potwor?w
{gornyLewyRogX, gornyLewyRogY}, -- wszystkie te 4 liczby to wzgledne pozycje zalezne od pozycji drzwi
{dolnyPrawyRogX, dolnyPrawyRogY} -- czyli gornyPrawyRog = {x=pozycja_drzwi.x + gornyLewyRogX, y=pozycja_drzwi.y + gornyLewyRogY, z=pozycja_drzwi.z}, a dolnyPrawyRog = {x=pozycja_drzwi.x + dolnyPrawyRogX, y=pozycja_drzwi.y + dolnyPrawyRogY, z=pozycja_drzwi.z}. Ten kwadrat jest przeszukiwany. Wiecej info na obrazku
}
}[/lua]

Obrazek, kt?ry powinien u?atwi? zrozumienie, jak dzia?a sprawdzanie potwork?w.
45542058442976992450.png



Pozwoli?em sobie na taki opis, poniewa? prawdopodobnie w przysz?o?ci wrzuc? ulepszon? wersj? tego skryptu.

Mam nadziej?, ?e wszystko jasne. Mi?ego u?ytkowania.
 

Madejaszek

Active User
Joined
Aug 23, 2013
Messages
128
Reaction score
0
Odp: [8.x]Jeden skrypt na wszystkie specjalne drzwi od levela + dodatkowe funkcje

Dzi?ki wielkie, a da si? zrobi? co? takiego, ?eby sprawdza?o czy w danym zasi?gu nie ma potwora tylko gracza?
 

misztrz440

Banned
Joined
Dec 15, 2012
Messages
1,032
Reaction score
39
Odp: [8.x]Jeden skrypt na wszystkie specjalne drzwi od levela + dodatkowe funkcje

Ja mam takie pytanie jak mam reborn system to jak chc? drzwi od reborna to musz? zamiast doPlayerLevel czy jako? tak getPlayerStorageValue(cid, 10000,1)?

10000- to jest storage reborn systemu og?lnie co nie? A jak chc? np. od 5 reborna to musz? wpisa? og?lne storage czyli 10000 czy 10005, bo wbi?em 5 reb ?

I nie wiem jak to rozwi?za?.
 

sprytnaaaaa

Advanced User
Joined
Apr 20, 2011
Messages
342
Reaction score
4
Odp: [8.x]Jeden skrypt na wszystkie specjalne drzwi od levela + dodatkowe funkcje

Ciekawy skrypcik dzi?ki u?yje na db :D
 

SolarisFlam

New User
Joined
Dec 19, 2013
Messages
3
Reaction score
0
Odp: [8.x]Jeden skrypt na wszystkie specjalne drzwi od levela + dodatkowe funkcje

Witam,sory ?e odkopuje stary temat,ale niestety nie dzia?aj? mi ten skrypt na drzwi ,brak b??d?w w konsoli,czy tu trzeba poda? pozycje drzwi ,je?eli nie chce aby sprawdza?o czy gracz jest w pobli?u monstera?
 

MiksereQ

Banned
Joined
Jul 2, 2013
Messages
531
Reaction score
32
Odp: [8.x]Jeden skrypt na wszystkie specjalne drzwi od levela + dodatkowe funkcje

Ustaw aid i uid w drzwiach xd
 

grabasz

User
Joined
Jan 24, 2012
Messages
12
Reaction score
0
Odp: [8.x]Jeden skrypt na wszystkie specjalne drzwi od levela + dodatkowe funkcje

Na pewno mi si? przyda ten scrypt Wielce Dzi?kuj?.

Pozdrawiam Mariusz
 
Status
Not open for further replies.
Top