Jump to content

Kreatív HQ


Recommended Posts

ennyit azért tudtam, az alap Lua dokumentáció fontosabb részeit már többször átolvastam, csak annyi problem volt, hogy sortörés helyett mindig a "/n" stringet kaptam vissza (pl.: "foo".."/n".."bar"="foo/nbar", bár pont így még nem próbáltam)

Ez minden bizonnyal azért lehet, mert a "/n", tényleg csak a "/n" stringet jelenti. Sortörésre a "\n" jó.

És:

"a" .. "\n" .. "sd" 
-- ugyanazt jelenti, mint ez: 
"a\nsd" 

Az inputtal nálad lesz a probléma, sima lua projekt-ben, ez a kód tökéletesen fut nálam:

function main () 
    local a = io.read() 
    print(a) 
end 
main() 

Sormozgatás: alt + nyilak

Gyorsbillentyűk igen részeltesen beállíthatók itt: Window>Preferences>General>Keys

Link to comment
  • Replies 61
  • Created
  • Last Reply

Top Posters In This Topic

ennyit azért tudtam, az alap Lua dokumentáció fontosabb részeit már többször átolvastam, csak annyi problem volt, hogy sortörés helyett mindig a "/n" stringet kaptam vissza (pl.: "foo".."/n".."bar"="foo/nbar", bár pont így még nem próbáltam)

Ez minden bizonnyal azért lehet, mert a "/n", tényleg csak a "/n" stringet jelenti. Sortörésre a "\n" jó.

És:

"a" .. "\n" .. "sd" 
-- ugyanazt jelenti, mint ez: 
"a\nsd" 

Az inputtal nálad lesz a probléma, sima lua projekt-ben, ez a kód tökéletesen fut nálam:

function main () 
    local a = io.read() 
    print(a) 
end 
main() 

Sormozgatás: alt + nyilak

Gyorsbillentyűk igen részeltesen beállíthatók itt: Window>Preferences>General>Keys

thx, sokat ez segített :)

Link to comment
  • 2 weeks later...

Kis utánanézéstt követően úgy látom, hogy jobb lenne a Github mint a googlecode. Egyelőre megtartom mindkettőt és valahogy szinkronizálom őket, de később inkább github lenne a jó.

A wikit most tényleg leírom és talán csinálok egy rövid szóbeli (aka:"kis"esszé/audio/video) leírást arról, hogy mi mégis hogy.

Hozzátenném, hogy az a project lista nem véletlenül van, ha túl komplexnek találom az inventory-t (és senki sem tud benne segíteni), akkor lehet h belekezdek egy freeroam/nfsworld szerű versenybe, az talán egyszerűbb. (nem lesz az :/)

Link to comment

kehhem, izé, a wiki...az még mindig nem van :oops:

DE! az OOP egyre jobb lesz, tehát valszeg megírom az alapokat újra (sokadjára) és wiki helyett ott lesznek az inline kommentek.

meh, itt leírok pár alapot: (Class, instance)

Inventory: 2D mátrix, a mezőket csak megnyitáskor generálja le, amúgy csak x,y koordinátákat tartalmaz a tárgyak adatain kívül.

Item: van ami dinamikus meg olyan ami meg nem az, na. Az egyik csak hivatkozik egy listára (Lua table, SQL db, xml) ami tartalmazza az adatokat, míg a másik egy saját listát használ. Azt nem mondom el melyik melyik :)

Physics: yyyyyep, fizika. A tárgyak hatnak egymásra ésatöbbi. Nem olyan bonyolult, ami lehet az többek közt: hőszigetelés, penész és egyéb baktériumok terjedése (ld.: romlandó ételek láncreakciója), nagyon egyszerű folyadékszimuláció + keverékek, lyukak, sérülések. Hogy pontosan melyik mire és miért jó azt most nem fejtem ki, mert abból nagyesszé lenne. Azért nem kell szomorkodni :)

On an other note: mi a $Łß$°˘# az hogy a __len megváltoztatása a metatable-ben nem befolyásolja a "#" operátort?!

Amint lesz időm átmigrálom a kódot git-re, a G.C. oldal már arra lett állítva.

Link to comment

Naaa, végre valami! Nem kell wiki, mindegy hova írod, tőlem mehet ide is, lehet hatalmasnagy-esszé tőle, az még jobb is, csak tudjam hogy mi a cél. Ezzel már lehet is valamit kezdeni, amit ide leírtál ;).

Az OOP újraírása meg jó ötlet. Az alapokat egyszer kell nagyon jól megírni, utána akkor öröm lesz használni bővíteni, viszont ha nem jó az alap akkor az szívás később.

Azt meg nem igazán értem. A __len pont hogy azt befolyásolja mivel tér vissza a '#' operátor(amivel ugye egy táblázat(tömb) méretét tudjuk lekérni). Megadsz __len-nek egy függvényt, és amivel az visszatér, azt fogja adni a '#' is a tábla hosszának.

Link to comment
  • 2 weeks later...

közben elkezdtem kísérletezni VM-ekkel, persze nem igaziakkal (csak afféle Virtual Virtual Machine)

akár game is lehet belőle, sőt a magot MTA ban is lehetne használni, csak kéne egy lfs pótlék az mkdir/rmdir miatt.

oops, most jut eszembe a github :clock:

https://github.com/adrenalineSYS/inventory.git

közben a googlecode is át lett állítva, ha van igény rá akkor asszem láttam valahol egy szinkronizálót

Link to comment

Érdekes iromány! Leírom, ami eszembe jutott olvasás közben.

Mit akarnánk xml-ben/adatbázisban/json-ban tárolni pontosan?

MySQL, SQLite biztosan kezel hosszabb szövegeket, access-ben is emlékeim szerint a MEMO típussal lehet.

A json meg csak egy szöveges megjelenítési forma tömbökhöz, objektumokhoz, valahol azt is tárolni kéne (sima szövegfájlban?).

Inventory bezárás szerintem nem kéne rögtön fájlba menteni és megnyitás előtt fájlból olvasni, gyakroi fájlműveletek inkább elkerülendők, addig lehetne a memóriában tárolni, ott gyorsabb az írás-olvasás, aztán időnként és a resource megállításakor menteni fájlba, adatbázisba vagy ahova kell.

Függvényeket tényleg nem tudnánk a jsonba egyszerűen eltárolni, de miért akarnánk egyáltalán? Oda elég vmi hivatkozás rá,a neve pl., a függvények meg külön vmi lua fájlba lehetnek definiálva.

őőő, egyenlőre talán ennyi.

Link to comment

--ok ez hosszú lett, de nagyon

yep, a memória cucc értelmesnek hangzik :)

a különféle adatbázisokkal annyira nem vok tisztában, de gyanús is volt az a 255 char...

nna, akkor egyelőre fel kéne építeni egy prototípust az inventory-k szerkezetéhet és majd aztán aggódni a mentések miatt :)

és a függyvények: yep, lehet h hagyni kéne az egész dynamic/static/full dynamic-ot és csak static és dynamic item lesz

ami kimaradt:

Shape keresés, ahogy én látom

nah, ugyebár a shape az itt az érdekes kérdés, mégpedig az, hogy hogyan jelöljük melyik pont hova tartozik és itt jönnek képbe a finomságok...

az eddigi koncepcióm az volt, hogy van egy origin ami hivatkozik az item-re, és vagy az origin hivatkozik a shape-re, vagy minden shape pont az origin-re

pölö:

--az alap item definíciókban megnézzük milyen formát keresünk, és tadá 
defaultItems = {asditem = {shape = { 
{0,1,0},--0=true, csak így gyorsabb volt írni 
{1,1,1}, 
{1,1,1}}}} 
  

amit még figyelembe kellene venni, az a forgatás, bár ez nem lesz nehéz sztem.

ami bonyolultabb, az a collision-check.

vagyis milyen szintű szabadság adódik a formák készítésekor, illetve használjunk-e különféle forma "szabványokat"

hmm, ez így nem túl értelmes :)

ilyen szabvány lehetne pl a concave/convex/holed/multi-holed/rectangle, tehát a script előre tudni fogja milyen checket kell végrehajtani (a neveket sztem kitaláljátok magatoktól, a hole azt jelenti hogy a mátrixban belül is vannak lyukak)

az item készítéshez pedig kéne valami app, de az szintén ráér, mindenesetre nem lenne bonyolult, akár ingame akár standalone.

random Lua kérdés: luainterface-ben hogy lehet fontokat állítani? :)

poénból elkezdtem valami Computercraft klónt és mivel a SciTE konzol nem a legjobb egy gammához, jól jön a .NET

ja, volt az a dolog a teszt funkciókról.

namármost van a Lua defult lib-ben egy lemock nevű kis dolog ami pont ilyenre jó, tehát felveszi a funkció viselkedését és visszajátssza azt

nna ide kell pár spoiler :mrgreen:

Link to comment

Ha nagyobb mennyiségű adatot szertnénk értelmesen, szerver oldalon tárolni, akkor szerintem az adatbázis a legjobb megoldás, azt pont erre találták ki.

És azért én is tudok ám sokat írni! ;)

Shape

Ez lenne ugye a tárgy formája. Az inventory tehát ilyen négyzetrács alapú lesz, ha az eddigieket jól értettem. Viszont ezt az origines dolgot nem igazán értem. De akkor az én öteltem a tárgyak formájának tárolására: mivel csak koordinátákat tárolunk, bármilyen alakot lehet készíteni, a pontok egyenként történő megadásával. Persze lehetnek beépített tipusok, ahol csak pár adatot (pl.: magasság, szélesség) kell megadni, a pontokat a szkript majd kiszámolja ezekből. De ezek akkor is csak pontok, x és y koordinátával. Lehet abszolút módon megadni őket, vagy lesz egy "fő" pont ( origin? ), amihez képest relatívan a többit kell megadni. Példa:

forma1 = { -- hehe, forma1... : p 
    shape = { -- egy négyzet 
        {3, 2},  
        {3, 3}, 
        {4, 2}, 
        {4, 3}        
    } 
}     
  
forma2 = { 
    oirigin={3, 2}, -- a viszonyítási pont 
    shape = { -- ugyanaz a négyzet 
      --{0, 0}, az origin legyen alapból benne, ne kelljen kézzel hozzáadni 
        {0, 1}, -- = oirigin[1] + 0, oirigin[2] + 1 
        {1, 0}, 
        {1, 1}        
    } 
} 

Forgatás, collosion check

Ezekhez az én előző példáimból mindkét fajtára szükség lenne, de legalább a 2. fajtára, mert azzal a origin körüli forgatás nagyon egyszerű (tekinthetünk a pontokra mint oirigin központú vektorokra, amiket 90 fokkal kell elforgatni). Az elsőt most hirtelen nem is tudom, hogy lehetne forgatni.

A collosion check viszont egyszerűbb lenne az első verzióval, csak ellenőrizni kéne, hogy a két formának van-e közös koordinátája. Ha van, akkor természtesen ütköznek. Ezt meg lehet csinálni a másikkal is, csak ott ugye abszolút koordinátákat kell számolni a relatívokból.

MTA-n kívül nem sokat foglalkoztam luáva, ilyen külső modulokra sosem volt szükségem, így ebben sajnos nem tudok segíteni.

Rákerestem, ez a lemock is egy külső dolog, nincs benne a lua standard könyvtárában, de attól még valamire biztosan lehet használni... :)

Ui.: regisztráltam githubra csiguusz néven.

Link to comment

benne van az, csak nem default modul :)

az alap lua4windozval gyütt, de eddig nem használtam

az origin itt nem a geometriai cuccok miatt fontos, hanem az lenne a shape-nem az egyetlen vonatkozó field-je....DE

jobban belegondolva, az origin nem jó megoldás, abból az okból, h ha a shape-pel nagyobb adatokat mozgatunk aaz tök hülyeség, tehát a invmatrix (most így ívják, na) tartalmazza vegyítve a shape-eket (vagy vonatkozást a stack-ekre/stack-eket) és egy másik subtable-ben vannak az item-ek

a shape típusok meg a collision check miatt fontosak, tehát pl ha tudjuk hogy egy forma nem tartalmaz lyukakat, nem kell az egészet átvizsgálni, ha tudjuk hogy egy téglalap, akkor azt is tudjuk, hogy milyen vonalon haladjunk.

elméletben növekedhet ettől a méretük, de így sokkal gyorsabb keresésekre lehet számítani, ami egy játéknál igencsak fontos.

közben töltöm is az első online git commit-eket és tanúsítom h a higany a nyomába sem ér (a bináris cuccokat meg egyelőre hanyagolom)

letisztult és sokat segít hogy a github csinált saját klienst

misc: kivonat az egyik fájlból:

Ha kommentel valaki a kódba dokumentációs céllal, akkor előny ha luadoc-ot követve teszi, mert így könnyebb lesz a kiadott cuccot olvasni (és nem kell pluszban írnunk)

valamelyik nap (értsd: vagy korán vagy este) mégiscsak kéne egy Skype/etc. találkozó hogy megvitassuk a terveket (és akár be is mutatkozzunk, ha nagyon muszáj :mrgreen:) mert így, hogy 24 óra mire megtudom hogy amit írok nem-e tök hülyeség az kicsit irritáló.

--edit: ajánlom hogy aki eddig SciTE szűz volt azoknak most ajánom hogy inkább ott teszteljen mert amíg nincs GUI/Save-Load addig úgyse kell az MTA API-ja, persze ha valaki bírja a Resedit-et, hajrá, az én gépem azt súgja a fülembe hogy nem

Link to comment

Én fönt voltam gmail-en kilenckor, de mivel más nem volt, ki is léptem kicsivel később.

Akkor a kódhoz:

open.lua

function getInventoriesOfElement (element)--returns all connected inventories 
        local invlist = getElementData(element,"inventories") 
        invlist = fromJSON(invlist) 
        return invlist 
end 

Element datában minek json-ként tárolni? Így egy hosszú stringet tárolunk, egy hivatkozás helyett a táblára.

  
function removeInvFromList (name) 
        invlist[name]=nil 
        return true 
end 

Az invlist hol van, vagy lesz valahol definiálva? Ugyanez a kérdésaz kicsit alatta lévő tmps-ről is:

function id () 
        local ret = "tmpinv" 
        local iter = 0 
        for i=1,#tmps do 
                iter = iter + 1 
                if not invlist[i] then 
                        ret=ret..i 
                        return ret 
                end 
        end 
        return ret..iter+1 
end 

Itt még optimalizálni is lehet, sok helyett inkább csak egyszer csináljunk stringet, így kevesebb memóriát használ:

local ret={"tmpinv"} 
for i=1,#tmps do 
   ret[#ret+1] = i 
end 
ret = table.concat(ret,"") 

Ezt a kódban több másik helyen is lehet használni. Valamint ennek a függvénynek amúgy a céljára sem sikerült rájönnöm

utility / adstring.lua

Erre ott a string.rep függvény.

Egyéb

Mindenhol azt látom, hogy a metatömb be lett állítva saját metatömbjének. Arre lennék kíváncsi, ennek mégis mi a gyakorlati haszna? A classes / shapes / FilledRectangle.lua fájlba például inkább gondot okoz: ha valamit nem talál a FilledRectangle-ben, akkor megpróbálja megkeresni a FilledRectangle-ben, de mivel itt nem találja, megpróbálja megkeresni a FilledRectangle-ben ...

Az os könyvtár mta-ban nem használható.

Ezzel különösebb gond nincs, csak nekem idegen, függvényt így sosem szoktam megadni, hogy:

nev = function () 
        --asd 
    end 
--én inkább: 
function nev () 
    --asd 
end 
--vagy: 
function tabla.nev () 
--... 
end 
  

De ez végül is teljesen mindegy,

A kódot átolvasva, ezek tűntek fel nekem főleg. Megbeszélés valóban nem fontos az íráshoz, csak az, hogy tudja az ember mit kell írni. Ezt nem tudom. Esetleg vmi fejlesztési terv, vagy csak annyi, hogy kéne egy ilyen meg egy ilyen dolog, ami azt fogja csinálni és akkor az meg is lesz.

Link to comment

90% ban SciTE-ban megy eddig minden, az open.lua tök használhatatlan eddig, azt csak azért írtam h lássam köbö mit akarok.

A string.rep: "Returns a string that is the concatenation of n copies of the string s. "

A repmix pedig közéékel egy plusz karaktert.

na jó, jobb lenne egy ilyen kérdezz felelek stílusban elmagyaráznom, mert így nem tudom h mennyire lesz érthető, de most nekiállok az ultimate esszének amiben megpróbálok minél több tervet elmagyarázni, aztán jöhet a feedback :)

...

Link to comment
A string.rep: "Returns a string that is the concatenation of n copies of the string s. "

A repmix pedig közéékel egy plusz karaktert.

Ez aranyos volt. :) Tehát pont ugyanazt csinálja, mint a string.rep, csak itt a ismételendő stringet két paraméterként kapott stringből állítja össze: string.rep ( s1..s2, iter ).

Az ultimate esszé jól hangzik, várom.

Link to comment
A string.rep: "Returns a string that is the concatenation of n copies of the string s. "

A repmix pedig közéékel egy plusz karaktert.

Ez aranyos volt. :) Tehát pont ugyanazt csinálja, mint a string.rep, csak itt a ismételendő stringet két paraméterként kapott stringből állítja össze: string.rep ( s1..s2, iter ).

Az ultimate esszé jól hangzik, várom.

nyet, KÖZÉ ékeli :)

de utólag belegondolva, lehet h az se lett volna rossz h.: string.rep(str..sep,x):sub(1,#str*x*#sep)

bár szerintem az utóbbi talán lassabb, már nem tom pontosan miért úgy csináltam, de mindenesetre működik

közben megkértek, hogy segítsek egy RP szeróban, oda is többek közt az Inventory kéne, tehát a prioritás továbbra sem változik

Inventory megint újrakezdve, mert ami eddig volt kevéske kód, az nem elég jó a collision/overlap check-ekhez

az Action osztály párhuzamosan készül, mivel az item-ek nagy része valamilyen ilyet használna és ez egyszerűsíthetné az item-ek script-elését.

Kérdés, hogy kell-e ilyen egyáltalán?

hangouts:

ok, felőlem lehet skype is, ha a G+ nem jön be. TS viszont már nem igazán, mert a képernyőmegosztás kellhet. (és ha nem tévedek abban olyan nincs)

adrenalinesys néven vagyok fenn Skype-on (ne lepődjetek meg majd a profil néven :) )

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...