What's new

Chunk & line map transform

Status
Not open for further replies.

Dantez

Moim sekretem jest ciasto
Joined
May 22, 2008
Messages
1,206
Reaction score
201
Author: Dantez
Version: 1.2
Platform: The Forgotten Server 0.3.6pl1

44za.png

Dzia?anie:
Funkcje przeczesuj?ce map? w poszukaniu przedmiot?w i zamieniaj?ce je na ich odpowiedniki z tablicy.


Spos?b u?ycia:​
Mamy do wyboru dwie funkcje: chunk i line. R??ni? si? one sposobem przeszukiwania mapy. Chunk dzieli fragment na kawa?ki o wielko?ci podanej w configu. Line zamienia przedmioty pojedynczo, co jedna kratk?. Spos?b chunk jest szybszy, a line bardziej efektowny.


Konfiguracja:
['keyword'] = {
[ID1] = ID2
}
W tym przypadku ka?dy przedmiot o id ID1 zostanie zamieniony na ID2.

['keyword'] = {
[ID1] = {ID2, ID3, ID4}
}
Tutaj przedmiot o id ID1 zostanie zamieniony na losowy przedmiot o id z tablicy.




Skrypt:​
[LUA]local config = {
chunkSize = 40, -- 40x40 tiles
stackposScaned = 6, -- 6 stackpos for each tile
chunkDelay = 400, -- in ms
pointDelay = 3, -- in ms
}

local items = {

['winter'] = {
-- Borders
[4542] = 4737,
[4544] = 4739,
[4543] = 4738,
[4545] = 4740,
[4547] = 4742,
[4548] = 4743,
[4546] = 4741,
[4549] = 4744,
[4550] = 4745,
[4551] = 4746,
[4552] = 4747,
[4553] = 4748,

-- Grounds
[4526] = 670,
[4527] = 670,
[4528] = 670,
[4529] = 670,
[4530] = 670,
[4531] = 670,
[4532] = 670,
[4533] = 670,
[4534] = 670,
[4535] = 670,
[4536] = 670,
[4537] = 670,
[4538] = 670,
[4539] = 670,
[4540] = 670,
[4541] = 670,

-- Trees
[2700] = 2698,
[7024] = 7023,
[2720] = 7022,
[2718] = 7020,

-- Items
[6216] = 6609,
},

['summer'] = {
-- Grounds
[670] = {4526, 4529, 4530, 4534, 4535, 4536, 4538, 4539, 4541},
[6594] = {4526, 4529, 4530, 4532, 4534, 4535, 4536, 4539, 4541},
[6598] = {4526, 4527, 4529, 4530, 4531, 4534, 4535, 4536, 4539, 4541},

-- Borders
[4737] = 4542,
[4738] = 4543,
[4739] = 4544,
[4740] = 4545,
[4741] = 4546,
[4742] = 4547,
[4743] = 4548,
[4744] = 4549,
[4745] = 4550,
[4746] = 4551,
[4747] = 4552,
[4748] = 4553,

-- Trees
[2698] = 2700,
[7023] = 7024,
[7022] = 2720,
[7020] = 2718,

-- Items
[6609] = 6216,
}
}

function pointTransform(pos, phase)
for stackpos = 0, config.stackposScaned do
local groundItem = getThingFromPos({x = pos.x, y = pos.y, z = pos.z, stackpos = stackpos}, false)
if(groundItem.itemid ~= 0) then
local item = items[phase][groundItem.itemid]
if(item == 0) then
doRemoveThing(groundItem.uid)
elseif(item ~= nil) then
doTransformItem(groundItem.uid, (type(item) == "table") and item[math.random(#item)] or item)
end
else
return true
end
end
return true
end

function chunkTransform(start, finish, phase)
for y = start.y, finish.y do
for x = start.x, finish.x do
pointTransform({x=x, y=y, z=start.z}, phase)
end
end
return true
end

function chunk(start, finish, phase)
if(not items[phase] or type(items[phase]) ~= "table") then
return print("[Chunk transform] Phase " .. phase .. " doesn't exist or is not a table.") end
local timer, chunkCountX, chunkCountY = 0, math.ceil((finish.x - start.x)/config.chunkSize), math.ceil((finish.y - start.y)/config.chunkSize)

for z = start.z, finish.z do
for y = 1, chunkCountY do
posy = start.y + config.chunkSize * y
for x = 1, chunkCountX do
posx = start.x + config.chunkSize * x
addEvent(chunkTransform, timer * config.chunkDelay,
{x=start.x + config.chunkSize * (x-1) + (x > 1 and 1 or 0), y=start.y + config.chunkSize * (y-1) + (y > 1 and 1 or 0), z=z},
{x=(posx > finish.x and finish.x or posx), y=(posy > finish.y and finish.y or posy), z=z}, phase)
timer = timer + 1
end
end
end
return true
end


function line(start, finish, phase)
if(not items[phase] or type(items[phase]) ~= "table") then
return print("[Line transform] Phase " .. phase .. " doesn't exist or is not a table.") end
local timer = 0

for z = start.z, finish.z do
for y = start.y, finish.y do
for x = start.x, finish.x do
addEvent(pointTransform, config.pointDelay * timer, {x=x, y=y, z=z}, phase)
timer = timer + 1
end
end
end
return true
end[/LUA]

Wywo?ania:
[LUA]chunk(startPos, endPos, arrayIndex)
point(startPos, endPos, arrayIndex)[/LUA]
 

Dantez

Moim sekretem jest ciasto
Joined
May 22, 2008
Messages
1,206
Reaction score
201
Odp: Chunk & line map transform

Update:
  • Aktualizacja na wersj? 1.1
  • Poprawiono b??d z funkcj? chunk, teraz skanuje ca?y podany zakres
  • Dodano mo?liwo?? usuwania przedmiot?w (wystarczy w tablicy poda? ID 0)

Update:
  • Aktualizacja na wersj? 1.2
  • Usuni?to niepotrzebn? p?tl?
  • Kto? to czyta?
  • Dodano przerwanie w przypadku braku tablicy przedmiot?w
 
Last edited:

Placek

Blue Waffle
Joined
Sep 30, 2008
Messages
6,777
Reaction score
661
Age
6
Odp: Chunk & line map transform

Bylo kilka razy, lata temu na otlandzie widzialem tego skrypta i go testowalem nawet wiec nie iwme po co kolejny raz to samo pisac...
Plus taki, ze tablice uzupelnione, ale tez, w 100% wszystko bedzie dzialac? Kto wie... Trzeba by potestowac...
 

Gandhi

Active User
Joined
Aug 7, 2013
Messages
80
Reaction score
19
Odp: Chunk & line map transform

Dobre dobre, dzi?kuj? za gotowe tablice... :D To zawsze najgorsze.

Mo?na pod??czy? pod onStartup z sprawdzaniem aktualnej daty + jeszcze pouzupe?nia? tabel? i mamy mapk? na 4 pory roku.
 
Last edited:

misztrz440

Banned
Joined
Dec 15, 2012
Messages
1,032
Reaction score
38
Odp: Chunk & line map transform

Ale gdzie to mam w talkaction czy gdzie, bo nie kumam?
 

Dantez

Moim sekretem jest ciasto
Joined
May 22, 2008
Messages
1,206
Reaction score
201
Odp: Chunk & line map transform

Gdziekolwiek chcesz to u?y?. Kopiujesz config, funkcje i robisz w?asn? tablic? o nazwie items z przedmiotami. Mo?na funkcje lekko zmodyfikowa? i u?y? w libach.
 

misztrz440

Banned
Joined
Dec 15, 2012
Messages
1,032
Reaction score
38
Odp: Chunk & line map transform

o cho to ju? zrobi?em. Nie wiem jak co? przerobi? ale spr?buj?. Najlepiej odpowiada?o by mi w talkaction na komend?, Wtedy staj? sb gdzie kolwiek i pisz? i si? zmienia t?o.
 

Placek

Blue Waffle
Joined
Sep 30, 2008
Messages
6,777
Reaction score
661
Age
6
Odp: Chunk & line map transform

@up
Prosty onsay z wykorzystaniem funkcji gdzie podane argumenty beda pobierane z parametrow talkactiona ktorego uzyjesz(badz jesli chcesz zeby zmienial ci sie ekran i zebys nie musial podawac pozycji to z pobranej pozycji cida +- 8 kratek zeby zmienialo caly ekran w kazda strone)...
Bierzesz podstawowy poradnik lua z forum i na pewno znajdziesz cos przydatnego. Napisac 3 czy 5 linijek to nie problem. Serio.

A mozesz sobie to wrzucic do jakiej funkcji chcesz. Mozesz to zrobic przy starcie serwera w global evencie. Mozesz to zrobic przy actionie jak ktos gdzies czegos uzyje. Mozesz to zrobic na onsayu przez komende. Mozesz to zrobic w creaturescripit np jak ktos sie zaloguje, wbije lvl czy cokolwiek... Mozesz to nawet dodac jako czar potwora, cos co robi npc np po wykonaniu jakiegos questa. Cokolwiek. Mozliwosci jest masa. To jest jak podstawowe skrypty wykorzystujace podstawowe funkcje. Mozesz zrobic co zechcesz.
 

misztrz440

Banned
Joined
Dec 15, 2012
Messages
1,032
Reaction score
38
Odp: Chunk & line map transform

o lol dzi?ki zobacz? co da si? zrobi?. Na razie po testuj? z talkaction. Zobaczymy czy co? wyjdzie.
 

Dubler

Lua Factory =)
Joined
Apr 8, 2009
Messages
1,874
Reaction score
112
Odp: Chunk & line map transform

1. Super niewydajne. pisa?em jaki? czas temu generowanie wi?kszych teren?w - w lua nie da rady tego zrobi?, w ten spos?b ma?? wysepk? mo?esz sobie co najwy?ej transformowa?.
2. Wygodniej (i jeszcze mniej wydajnie) dla u?yszkodnika zrobi? po prostu kopiowanie kawa?ka mapy zamiast super pro elo transformacji
3. 1.2#3 - owszem, ja
 

Dantez

Moim sekretem jest ciasto
Joined
May 22, 2008
Messages
1,206
Reaction score
201
Odp: Chunk & line map transform

1. Albo domek? Poza tym jest tu kilka rzeczy wartych poprawy np. przesy?anie tablicy za pomoc? parametru, ale jestem zbyt leniwy.
2. Zale?y. Je?eli teren mia?by si? zmienia?, a do niego prowadzi?yby teleporty, to teleporty r?wnie? trzeba by by?o zmienia? na nowe pozycje. Je?eli na tym terenie by?yby skrypty, kt?re zale?? od pozycji, to r?wnie? trzeba to uwzgl?dni?.
3. Jedyny.
 

Anakonta

Senior User
Joined
Oct 5, 2010
Messages
536
Reaction score
10
Odp: Chunk & line map transform

Tyle mo?liwo?ci ten skrypt daje ?e trudno wyliczy?, tylko troch? szkoda ?e ma?o optymalny jest i przy wi?kszym terenie lagi si? robi?.
 

Dantez

Moim sekretem jest ciasto
Joined
May 22, 2008
Messages
1,206
Reaction score
201
Odp: Chunk & line map transform

Tyle mo?liwo?ci ten skrypt daje ?e trudno wyliczy?, tylko troch? szkoda ?e ma?o optymalny jest i przy wi?kszym terenie lagi si? robi?.
Nie, lagi si? zrobi? jak b?dzie za du?y chunk i za ma?y delay. Wszystko opiera si? na addEventach, przez co oddajemy czas na wykonanie reszty. Przy obecnej konfiguracji chunk mamy 4000 kratek na sekund?. (czas i tak zale?y r?wnie? od ilo?ci przedmiot?w na kratce)
 
Status
Not open for further replies.
Top