Szerző Téma: lua ciklus  (Megtekintve 715 alkalommal)

Nem elérhető trodhenta

  • Trainee
  • *
  • Hozzászólások: 121
  • Segített: 11
  • President
lua ciklus
« Dátum: 2019-08-16, 01:37:55 »
Sziasztok, egy mount rendszer questet készítenék ami leltárból adja meg a bónuszt a karakternek.


function mount_information(azonosito) -- Mount információk


-- PECSÉT ID   MOUNT ID MOUNT NEVE  BONUSZ TÍPUSA, SZÁZALÉK

mount_adatok = {

[80028] = { 35000, "Teszt mount", "APPLY_MAX_HP", 50000, 60*60*24*365*60}

}
azonosito = tonumber(azonosito)

            return mount_adatok[azonosito]
end

az a kérdésem lenne hogy hogy tudok egy ciklust lefutattni ami átmegy az id-ken, pl: 80028, és ki olvassa utána a dolgokat?!  Sokkal áttekinthetőbb lenne szerintem egy helyen hozzáadnom, mint beírnom 2-3 helyre is. Előre is köszönöm ha valaki segít.
Ha segítettem vagy akármi érted, akkor a +-t elfogadom.

Nem elérhető Distraught

  • Professional
  • ***
  • Hozzászólások: 556
  • Segített: 274
Re:lua ciklus
« Válasz #1 Dátum: 2019-08-16, 19:12:36 »
A LUA nem egy Metin2 specifikus nyelv, bőven találsz a neten leírást hozzá ilyenekről.

C++ programmer at Gameloft

Nem elérhető trodhenta

  • Trainee
  • *
  • Hozzászólások: 121
  • Segített: 11
  • President
Re:lua ciklus
« Válasz #2 Dátum: 2019-08-16, 20:13:57 »
Persze én ezzel tisztában vagyok. Meg szinte biztos hogy forrásban jobb lenne megoldani, mint quest-ben hisz sok helyről vérzik például ha kereskedhető egy mount és ha átadod valakinek akkor relogolni kell stb...

Esetleg megtudod adni hogy keressek rá?! Tegnap óta ezzel foglalkozok és nem akar összejönni, dinamikusra akarom az egészet átláthatóra, legjobban optimalizáltra.
Ha segítettem vagy akármi érted, akkor a +-t elfogadom.

Nem elérhető Eraman

  • Beginner
  • Hozzászólások: 36
  • Segített: 3
Re:lua ciklus
« Válasz #3 Dátum: 2019-08-17, 09:21:18 »
Nem hiszem hogy az ötleted egy szép megoldással könnyen megoldható lenne anélkül, hogy segédfüggvényeket hoznál létre forrásban.

Egy lehetőség ami elképzelhető lehet:

local mountQuery = nil

for i = [LEGKISEBBMOUNTIDJE], [LEGNAGYOBBMOUNTIDJE], 1 do
     if pc.count_item(i) > 0 then
          mountQuery = mysql_query("select * from player.item where vnum =" ..  i .. " LIMIT 1")
     end
end

-- szedd ki az attrtype, attryvalue-kat a mountQuery-ből majd add hozzá affect.add_collect-tel a bónuszait
-- ezután affect.remove_collect ha a egy ilyen mount sincs a leltárban

A javaslatom az, hogy gondold át, hogy valóban jó ötlet-e leltárból adni a bónuszokat.

Nem elérhető trodhenta

  • Trainee
  • *
  • Hozzászólások: 121
  • Segített: 11
  • President
Re:lua ciklus
« Válasz #4 Dátum: 2019-08-17, 17:14:21 »
Köszi Eraman, a példád alapján megcsináltam a mount rendszer alapján, a bónusz elvétel/hozzáadás mostmár dinamikus, csak 2 helyen kell hozzá írnom a dolgokat, a tárgy használatnál, és magánál a funkciónál ha új mountot rakok be. Viszont még egy olyan kérdésem lenne hogy 80028 id-től egészen 81000-ig lefutattni egy ciklust mennyrie okozna laggot ha egy nagy játékos közösség lenne ( akár 500 játékos ) ? Illetve egy funkciót hogy lehet globálissá tenni azon kívűl hogy a questlib.lua-ba írom bele.

Üzenet összefésülés: 2019-08-18, 02:43:25
Áhh de rossz hogy alig értek én ehhez, forrásban sokkal jobb lenne megoldani, mint quest-ben vacakolni, de sehol sem kapok egy leírást...
« Utoljára szerkesztve: 2019-08-18, 02:43:25 írta trodhenta »
Ha segítettem vagy akármi érted, akkor a +-t elfogadom.