[Release] Lotto Quest

Indította xxxHUNâ„¢, 2013-08-09, 18:05:38

2013-08-09, 18:05:38 Utolsó szerkesztés: 2013-08-10, 09:54:22 Szerző: xxxHUN™
Sziasztok!

Nem nagyon találkoztam még hasonlóval, szóval gondoltam megosztom veletek a lottó questemet, amit mondhatni a valódi lottó játék mintájára készítettem, leteszteltem, de ha esetleg valami gond lenne vele, jelezzétek nekem.

Szóval... Lássunk hozzá.  :)

Először is, amire szükség lesz:
1. ATAG MySQL Lib-je (a tömbös megoldás):
http://metin2hungary.net/index.php/topic,151357.msg825882.html#msg825882

2. table.contains funkcióm:
questlib.lua-ba:
function table.contains( array, item)
for i = 1, table.getn(array) do
if array[i] == item then
return true
end
end
return false
end

quest_functions-ba:
table.contains

Vagy csak szimplán quest_functions-ba:
table_is_in
És a quest-ben a table.contains-eket lecserélni table_is_in-re, sajnos mire megláttam, hogy van ilyen funkció, már én is megírtam.

3. MySQL-be táblák:
DROP TABLE IF EXISTS `lotto_nyeroszamok`;
CREATE TABLE `lotto_nyeroszamok` (
  `nyeroszam1` tinyint(2) DEFAULT '0',
  `nyeroszam2` tinyint(2) DEFAULT '0',
  `nyeroszam3` tinyint(2) DEFAULT '0',
  `nyeroszam4` tinyint(2) DEFAULT '0',
  `nyeroszam5` tinyint(2) DEFAULT '0',
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `lotto_nyeroszamok` VALUES ('0', '0', '0', '0', '0');

DROP TABLE IF EXISTS `lotto`;
CREATE TABLE `lotto` (
  `szam1` tinyint(2) DEFAULT '0',
  `szam2` tinyint(2) DEFAULT '0',
  `szam3` tinyint(2) DEFAULT '0',
  `szam4` tinyint(2) DEFAULT '0',
  `szam5` tinyint(2) DEFAULT '0',
  `player_id` int(9) DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Köszönöm őket DonNodus-nak.  ;D
UI: Elfelejtettem írni, hogy a táblák a player adatbázisba kellenek. :) (bocsi:D)

4. A Lottó Szelvény type-ját szerverben állítsuk 18-ra. (50027 a vnum-ja)

5. És végül maga a Quest:
quest lotto begin
state start begin
when 9010.chat."GM : Lottó Sorsolás " with pc.is_gm() begin
if game.get_event_flag("lotto_sorsolas") > get_time() then
say_reward("A sorsolás már megtörtént. ")
else
say_title("Lottó Sorsolás ")
say("Üdvözöllek ".. pc.get_name() .."! ")
say("A sorsolás megkezdéséhez kattints a Tovább gombra! ")

wait()
local szamok = {}
for i = 1, 5 do
local szam = number(1,90)
if table.contains(szamok,szam) then
while table.contains(szamok,szam) do
szam = number(1,90)
end
end
table.insert(szamok,szam)
end
mysql_query("UPDATE player.lotto_nyeroszamok SET nyeroszam1 = '".. szamok[1] .."', nyeroszam2 = '".. szamok[2] .."', nyeroszam3 = '".. szamok[3] .."', nyeroszam4 = '".. szamok[4] .."', nyeroszam5 = '".. szamok[5] .."';")
game.set_event_flag("lotto_sorsolas",get_time()+7*24*60*60)
say("A sorsolás megtörtént. ")
end
end
when 9010.chat."Lottó Szelvény Vásárlás " begin
say_title("Vegyeskereskedés ")
say("Üdvözöllek ".. pc.get_name() .."! ")
say("Egy Lottó Szelvény 1 millió Yang-be kerül. ")
say("")
say("Szeretnél venni egyet? ")

local vasarlas = select ("Igen","Nem")
if vasarlas == 2 then
return
else
if pc.get_gold() < 1000000 then
say_reward("Nincs elég pénzed. ")
else
pc.changegold(-1000000)
pc.give_item2(50027,1)
end
end
end
when 50027.use with game.get_event_flag("lotto_sorsolas") > get_time() begin
if pc.getqf("lottozhat") == game.get_event_flag("lotto_sorsolas") then
say_reward("Egy játékos csak egyszer vehet részt egy sorsoláson. ")
else
say_title("Lottó Szelvény ")
say("Adj meg 5, egymástól különböző számot, amelyekre igaz: ")
say("\t - nem kisebb, mint 1 ")
say("\t - nem nagyobb, mint 90 ")

wait()
local szamok = {}
for i = 1, 5 do
say_title(i ..". szám: ")
local szam = tonumber(input())
if szam < 1 or szam > 90 or table.contains(szamok,szam) or szam == nil then
say_reward("A számoknak min. 1-nek, max. 90-nek és különbözőknek kell lenniük! ")
return
end
table.insert(szamok,szam)
end
mysql_query("INSERT INTO player.lotto VALUES ('".. szamok[1] .."','".. szamok[2] .."','".. szamok[3] .."','".. szamok[4] .."','".. szamok[5] .."','".. pc.get_player_id() .."');")
pc.setqf("lottozhat",game.get_event_flag("lotto_sorsolas"))
pc.remove_item(50027,1)
say("Megjátszottad a számokat, sok szerencsét! ")
end
end
when login with game.get_event_flag("lotto_sorsolas") <= get_time() begin
if pc.getqf("lottozhat") == game.get_event_flag("lotto_sorsolas") then
local nyeroszamok_sql = mysql_query("SELECT * FROM player.lotto_nyeroszamok;")
local szamok = mysql_query("SELECT * FROM player.lotto WHERE player_id = ".. pc.get_player_id() ..";")
local nyeroszamok = {}
local talalat = 0
local jutalom = { 0, 100000, 1000000, 10000000, 100000000, 1000000000}
for i = 1, 5 do
table.insert(nyeroszamok,nyeroszamok_sql[1][i])
end
for j = 1, 5 do
if table.contains(nyeroszamok,szamok[1][j]) then
talalat = talalat + 1
end
end
mysql_query("DELETE FROM player.lotto WHERE player_id = ".. pc.get_player_id() ..";")
pc.setqf("lotto_nyeremeny",jutalom[talalat+1])
pc.setqf("lottozhat",0)
syschat(talalat.. " számot találtál el a lottón, a jutalmad: ".. jutalom[talalat+1] .." Yang. ")
syschat("A jutalmadat a Vegyeskereskedésnél veheted fel. ")
end
end
when 9010.chat."Lottó Nyeremény Felvétele " begin
say_title("Vegyeskereskedés ")
if pc.getqf("lotto_nyeremeny") == 0 then
say_reward("Nem nyertél semmit, nincs mit felvenned... ")
else
if pc.get_gold() + pc.getqf("lotto_nyeremeny") > 1999999999 then
pc.setqf("lotto_nyeremeny",pc.getqf("lotto_nyeremeny")-(1999999999-pc.get_gold()))
pc.changegold(1999999999-pc.get_gold())
say_reward("Felvetted a jutalmad egy részét, ".. pc.getqf("lotto_nyeremeny") .." Yang-ért gyere vissza később. ")
else
pc.changegold(pc.getqf("lotto_nyeremeny"))
pc.setqf("lotto_nyeremeny",0)
say_reward("Felvetted a nyereményedet. ")
end
end
end
end
end

UI: A Quest kapott egy kis kiegészítést. :)

Ha a GM elindítja a sorsolást, egy héten belül lehet játszani a lottón (egy játékosnak csak egyszer), ha letelt az egy hét, a következő bejelentkezésnél kiderül, hogy nyert e a játékos, vagy sem.

Remélem tetszik.  :)
Ha gond van jelezzétek, legyetek szívesek.

Üdv.: xxxHUN™

by Morpheus

Hello!

Hát... A helyzet az, hogy ezt a questet mysql nélkül is gond nélkül meg lehet oldani, bár anno egyszerűbbnek tűnt mysql-el.  :D
Átírtam egy kicsit a dolgot, most csak event flag és quest flag van használatban.
Azt hiszem, így finoman fogalmazva is sokkal jobb a megoldás, mint az előző verziónál.  :D

Amire szükség van a működéshez, az csupán annyi, hogy ezek a funckiók be legyenek írva quest_functions fájlba:
table.sort
table_is_in

Persze, ha esetleg hiányolna valamit, azt nem árt pótolni.  :)

A Quest csatolva, természetesen teszteltem.

Remélem, lesz akinek jól jön a dolog. :)

Üdv.: xxxHUN™

by Morpheus