Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Konto Bankowe w MySQL


Rekomendowane odpowiedzi

  • Odpowiedzi 104
  • Dodano
  • Ostatniej odpowiedzi
Opublikowano

Przy większej ilości osób na serwerze, może obciążyć bazę trochę..

Quest fajny, mogę Ci go przetestować - ale wieczorem gdy bd miał maszynę;d

 

Nie obciąży, chyba że by dużo zapytań było do tabelki player, item itd.

Opublikowano

Wy jakoś dziwnie to rozumujecie. Pomyślcie, że KAŻDA operacja w grze równa się z query do log/item lub chuj wie jakiej jeszcze tabelki. To jest MNÓSTWO zapytań co chwilę, każda zmiana pozycji, każde przesuniecie itemu w eq, każde połączenie, rozłączenie itemu, każde zabicie mobka. WSZYSTKO. a wy pieprzycie, że jak kilka(naście) osób wykona po 3 query w ciągu minuty to obciąży serwer? Puk puk w czoło.


 

Opublikowano

Luudzie, to nie obciaza serwera... xD

Ladnie wszystko smiga, fajny pomysl ;)

Polecam +

I walk 1000 miles to see you...

Opublikowano

Wy jakoś dziwnie to rozumujecie. Pomyślcie, że KAŻDA operacja w grze równa się z query do log/item lub chuj wie jakiej jeszcze tabelki. To jest MNÓSTWO zapytań co chwilę, każda zmiana pozycji, każde przesuniecie itemu w eq, każde połączenie, rozłączenie itemu, każde zabicie mobka. WSZYSTKO. a wy pieprzycie, że jak kilka(naście) osób wykona po 3 query w ciągu minuty to obciąży serwer? Puk puk w czoło.

 

Jak to będą zapytania select w dużej ilości do tabelki item to czasem są lagi niewyobrażalne - wiem z doświadczenia. Ale np do account możesz jakie chcesz zapytania robić, a nie obciąża nic :D

Opublikowano

@Up

ale te selecty w 'banku' zwracają jeden wynik, nie przeszukują jakiejś w chuj dużej tabeli, więc nie muszą się zbytnio 'napracować' wystarcy dopisać LIMIT 1 i jak znajdzie jeden wynik(tylko 1 potrzebujemy) to przestanie szukać, co w pewnym stopniu odciąży ten jakże mało obciążający query w pewnym stopniu ;x


 

Opublikowano

@Up

ale te selecty w 'banku' zwracają jeden wynik, nie przeszukują jakiejś w chuj dużej tabeli, więc nie muszą się zbytnio 'napracować' wystarcy dopisać LIMIT 1 i jak znajdzie jeden wynik(tylko 1 potrzebujemy) to przestanie szukać, co w pewnym stopniu odciąży ten jakże mało obciążający query w pewnym stopniu ;x

 

No akurat w tym queście nie ma zbytniego obciążenia, ale raz napisałem taki trochę bardziej rozbudowane to potem już trochę lagi były.

Opublikowano

@up

Proszę, poprawiłem, zobacz czy działa:

 

---------------------------------------
-- Quest created by Dargon
-- version: beta
-- release: 12.05.2012 10:30
---------------------------------------
quest player_bank begin
state start begin
 when 9005.chat."Moje Konto Bankowe" begin
  local owner_name = pc.get_name()
  local acc_identify_nr = pc.getqf("acc_code")
  local gold_state = pc.getqf("gold_state")
  if acc_identify_nr == 0 then
   say_title("Bankier")
   --/////////////--
   say("Witaj. Jestem Królewskim Bankierem. Mam do")
   say("do zaoferowania dla Ciebie nowo otwarty system")
   say("kont bankowych. Oferuje on depozyt na pieniądze")
   say("klienta, tak, by nie musiał mieć ich zawsze przy")
   say("sobie, aczkolwiek by miał możliwość ich wypłaty")
   say("w wielu punktach w całym Imperium.")
   wait()
   say_title("Bankier")
   --/////////////--
   say("Gdy zdeponujesz swoje pieniądze na koncie, po ")
   say("upływie określonego czasu ich ilość zostanie")
   say("zwiększona o procent ustalony przez nasz system.")
   say("Gdy w twoim ekwipunku będzie znajdowało się ")
   say("więcej niż 2 miliony yang, nadwyżka zostanie ")
   say("automatycznie zdeponowana na twoim koncie osobistym.")
   say("Czy jesteś zainteresowany?")
   local x = select("Tak", "Nie tym razem")
   if x == 1 then
 say_title("Bankier")
 --/////////////--
 say("Gratuluje dobrego wyboru. A więc od założenia")
 say("twojego konta osobistego dzieli Cię już tylko")
 say("jeden krok. Aby zwiększyć bezpieczeństwo twoich")
 say("składowanych pieniędzy, zostaniesz teraz")
 say("poproszony o ustalenie 5 cyfrowego kodu")
 say("bezpieczeństwa. Dzięki temu, tylko Ty będziesz")
 say("mógł wyciągnąć pieniądze z konta")
 say("")
 local security_code = tonumber(input("12345"))
 if security_code > 9999 and security_code < 100000 then
  say_title("Bankier")
  --/////////////--
  say("Twój kod bezpieczeństwa jest poprawny.")
  say("")
  say("Wpisany przez Ciebie kod to: "..security_code.." ")
  say("Czy jesteś pewien tego kodu?")
  say("")
  local c = select("Tak", "Nie")
  if c == 1 then
   pc.setqf("acc_code", security_code)
   say_title("Bankier")
   --/////////////--
   say("Twoje Konto Bankowe zostało utworzone")
   say("Życzymy pomyślnego korzystania z naszej oferty")
   say("Możesz już teraz zdeponować swoje pieniądze")
   query("INSERT INTO player.player_bank SET `owner_name` = '"..owner_name.."', `security_code` = '"..security_code.."';")
  else
   return
  end
 else
  say_title("Bankier")
  --/////////////--
  say("No cóż, zatem gdybyś się jednak zdecydował, zapraszamy")
  say("ponownie")
  say("")
 end
   end
  else
   say_title("Bankier")
   --/////////////--
   say("Witaj w panelu twojego Konta Bankowego.")
   say("")
   say("Wybierz, co byś chciał zrobić ")
   say("")
   local s = select("Wpłać Pieniądze", "Wypłacić Pieniądze", "Stan Konta", "Wyjdź ")
   if s == 1 then
 say_title("Bankier")
 --/////////////--
 say("Proszę, podaj swój Kod Bezpieczeństwa")
 say("")
 local input_code = tonumber(input(""))
 if input_code == pc.getqf("acc_code") then
  say_title("Bankier")
  --/////////////--
  say("Posiadasz: "..pc.get_money().." Yang")
  say("")
  say("Wpisz ilość, jaką chcesz zdeponować na koncie")
  local add_money = tonumber(input(""))
  if pc.get_money() < add_money then
   say_title("Bankier")
   --/////////////--
   say("Nie posiadasz tyle pieniędzy")
   say("")
  else
   if add_money < 2000000000 then
    say_title("Bankier")
    --/////////////--
    say("Zdeponowałeś "..add_money.." Yang")
    pc.change_money(-add_money)
    local p_select = query("SELECT owner_name FROM player.player_bank WHERE owner_name = '"..owner_name.."';")
    query("UPDATE player.player_bank SET money_state = money_state + '"..add_money.."' WHERE owner_name = '"..p_select.."';")
    query("INSERT INTO log.player_bank_log SET what = 'ADD_GOLD', gold_count = '"..add_money.."', who = '"..owner_name.."';")
   else
    say_title("Bankier")
    --/////////////--
    say("Nie możesz tyle wpłacić ")
    say("")
   end
  end
 else
  say_title("Bankier")
  --/////////////--
  say("Podałeś zły Kod Bezpieczeństwa")
  say("")
 end
   elseif s == 2 then
 local g_select = query("SELECT money_state FROM player.player_bank WHERE owner_name = '"..owner_name.."';")
 if g_select > 0 then
  say("Wpisz ilość, jaką chcesz wypłacić ")
  say("Możesz pobrać: "..g_select.." yang")
  local remove_money = tonumber(input(""))
 if remove_money < g_select then
  say("Pobrałeś "..remove_money.." Yang")
  pc.change_money(remove_money)
  local p_select = query("SELECT owner_name FROM player.player_bank WHERE owner_name = '"..owner_name.."';")
  query("UPDATE player.player_bank SET money_state = money_state - '"..remove_money.."' WHERE owner_name = '"..p_select.."';")
 else
  say("Nie masz tyle pieniędzy na koncie!")
 end
 else
  say("Nie masz pieniędzy na koncie!")
 end
   elseif s == 3 then
 local g_select = query("SELECT money_state FROM player.player_bank WHERE owner_name = '"..owner_name.."';")
 say("Na twoim koncie znajduje się "..g_select.." Yang")
   elseif s == 4 then
 return
   end
  end
 end
 when 9005.chat."GM: System Oprocentowania" with pc.is_gm() begin
  query("UPDATE player.player_bank SET money_state = money_state + (money_state*0.03);")
  notice_all("[sYSTEM] Stan pieniędzy na Wszystkich Kontach Bankowych został zwiększony o 3%")
 end
end
end

http://wklej.to/tBWrA

Opublikowano

Sprawdzam za chwile dam edita czy da się wypłacać więcej niż ma się na koncie.

 

@Edit po wybraniu opcji Wypłata pieniędzy nic się nie dzieje ;/ Wyłącza się quest.

@Edit2

kwiatmix jak byś jeszcze mógł zobacz o co chodzi..

Dargon podklej te tabelki które dał eMaxx do topica naprawiaja bug który polega na wpłacie do banku więcej niż 2.1kkk

http://wklej.to/tfO82

 

Ogólnie quest bardzo mi sie podoba otwiera wiele nowych możliwości w funkcjach metina. Szkoda tylko że w quescie był bug a nie sprawdziłemt ego wczesniej bo przez to miałem drobne problemy na dedyku. Ale i tak dziekuje za udostępnienie dzieki takim ludziom cos na tym forum można znaleźć przydatnego.

791f747188ac8.png

Opublikowano

@up

Spróbuj bez tego jednego ifa :

	 local g_select = query("SELECT money_state FROM player.player_bank WHERE owner_name = '"..owner_name.."';")
	  say("Wpisz ilość, jaką chcesz wypłacić ")
	  say("Możesz pobrać: "..g_select.." yang")
	  local remove_money = tonumber(input(""))
	 if remove_money < g_select then
	  say("Pobrałeś "..remove_money.." Yang")
	  pc.change_money(remove_money)
	  local p_select = query("SELECT owner_name FROM player.player_bank WHERE owner_name = '"..owner_name.."';")
	  query("UPDATE player.player_bank SET money_state = money_state - '"..remove_money.."' WHERE owner_name = '"..p_select.."';")
	 else
	  say("Nie masz tyle pieniędzy na koncie!")
	 end

To podmień za tamto:

	 local g_select = query("SELECT money_state FROM player.player_bank WHERE owner_name = '"..owner_name.."';")
	 if g_select > 0 then
	  say("Wpisz ilość, jaką chcesz wypłacić ")
	  say("Możesz pobrać: "..g_select.." yang")
	  local remove_money = tonumber(input(""))
	 if remove_money < g_select then
	  say("Pobrałeś "..remove_money.." Yang")
	  pc.change_money(remove_money)
	  local p_select = query("SELECT owner_name FROM player.player_bank WHERE owner_name = '"..owner_name.."';")
	  query("UPDATE player.player_bank SET money_state = money_state - '"..remove_money.."' WHERE owner_name = '"..p_select.."';")
	 else
	  say("Nie masz tyle pieniędzy na koncie!")
	 end
	 else
	  say("Nie masz pieniędzy na koncie!")
	 end

Opublikowano

Dargon wszystkie błędy i bugi w queście masz w moich postach oraz ich naprawę. Kwiatmix naprawił część błędów w queście a eMaxx poprawił tabelę za co im bardzo dziękuję.

791f747188ac8.png

Opublikowano

Nie prawda ... Mam 1,9kkk yang i wypłacam powiedzmy 300kk, oj jaki bug ;( Zajebiście odbugowane questy daliście ;)

 

 

local yang_bug = pc.get_money() + wyplac
if yang_bug <= 1999999999 then

 

Ino przerobić pod wersję tego questa, który jest podany tutaj w temacie.

 

umarł

Opublikowano

@Dargon.

Mógłbyś zmienić te zapytania swoje na te od eMaxaa i wzwiązku z czym

usunąć limit kasy w banku (2kkk , niby ktos pisał ze taki jest) + naprawa tego ze jak wpiszesz -yang to tyle ci wypłaci :)

nie umieszczamy linków zewnętrznych.

Opublikowano

Nie miałem ostatnio zbyt czasu dodać nowszą wersję... Teraz gdy siadłem przy tym napotkałem mały problem. Nie umiem znaleźć dobrego sposobu na sprawdzenie stanu konta i porównanie go z wpisywaną kwotą do wypłacenia. Jedyne rozwiązanie jakie znalazłem generowało błąd z wpisywaniem yang na minus, co skutkowało doładowaniem konta o daną kwotę, nawet, jak się jej nie posiadało... Tu właśnie jest martwy punkt. Może ktoś już wymyślił rozwiązanie?

Opublikowano

@Dargon trzym

local wyplac = input()
if wyplac > 0 and wyplac < 2000000000 then
if wyplac =="" then
say_title(mob_name(20024)..": ")
say("")
say("Musisz podac ile chcesz wyplacic.")
elseif wplac > pc.getqf("nasza_kasa") then
say_title(mob_name(20024)..": ")
say("")
say("Nie masz tyle Yang.")
elseif wplac <= pc.getqf("nasza_kasa") then
local warunek = pc.get_money()+wyplac
if warunek >= 2000000000 then
say_title(mob_name(20024)..": ")
say("")
say("Chcesz sobie zbugowac Yang?")
end
pc.change_money(wyplac)
local zapisz = pc.getqf("nasz_kasa")-wyplac
pc.setqf("nasza_kasa", zapisz)
say_title(mob_name(20024)..": ")
say("")
say("Wyplaciles: "..wyplac.." Yang.")
say("Na koncie masz: "..zapisz)
end
end
say_title(mob_name(20024)..": ")
say("")
say("Wplaciles za duzo Yang, albo")
say("za malo lub nie podales samych")
say("cyfr.")
end

cały quest:

 

-------------------
--Quest Bank
--By Ktostam.
--Bez bugu
-------------------
quest bank begin
state start begin
when 20024.chat."Bank" begin
if pc.getqf("nasz_pin") == 0 then
say_title(mob_name(20024)..": ")
say("")
say("Witaj. Jestem Bankierem")
say("w tym krolestwie. Masz")
say("u mnie juz konto bankowe.")
say("")
say("Co chcesz zrobic?")
local wplac = "Wplac Yang"
local wyplac = "Wyplac Yang"
local stan = "Stan Konta"
local pin = "Zmien PIN"
local anu = "Nic"
local zrob_cos = select(wplac, wyplac, stan, pin, anu)
if zrob_cos == 1 then
say_title(mob_name(20024)..": ")
say("")
say("Podaj swoj PIN.")
local podaj_swoj_pin = input()
if podaj_swoj_pin == pc.getqf("nasz_pin") then
say_title(mob_name(20024)..": ")
say("")
say("Poprawny PIN.")
say("")
say("Wpisz ile chcesz wplacic.")
say("Maksymalna kwota to 1.999.999.999.")
say("Minimalna kwota to 1.")
local wplac = input()
if wplac > 0 and wplac < 2000000000 then
if wplac =="" then
say_title(mob_name(20024)..": ")
say("")
say("Musisz podac ilosc Yang.")
elseif wplac > pc.get_money() then
say_title(mob_name(20024)..": ")
say("")
say("Nie masz tyle Yang.")
elseif wplac <= pc.get_money() then
pc.change_money(-wplac)
local zapisz_kase = pc.getqf("nasza_kasa")+wplac
pc.setqf("nasza_kasa", zapisz_kase)
say_title(mob_name(20024)..": ")
say("")
say("Wplaciles na konto: "..wplac)
say("Na koncie znajduje sie: "..zapisz_kase)
say("Dziekuje Ci za wplacenie Yang.")
end
end
say_title(mob_name(20024)..": ")
say("")
say("Wpisales za duzo Yang do")
say("wyplacania, albo")
say("za malo lub nie podales samych")
say("cyfr.")
end
say_title(mob_name(20024)..": ")
say("")
say("Znasz swoj PIN?")
elseif zrob_cos == 2 then
say_title(mob_name(20024)..": ")
say("")
say("Podaj swoj PIN")
local podaj_swoj_pin = input()
if podaj_swoj_pin == pc.getqf("pin") then
say_title(mob_name(20024)..": ")
say("")
say("Wpisz ile chcesz wyplacic.")
say("Maksymalna kwota to 1.999.999.999.")
say("Minimalna kwota to 1.")
local wyplac = input()
if wyplac > 0 and wyplac < 2000000000 then
if wyplac =="" then
say_title(mob_name(20024)..": ")
say("")
say("Musisz podac ile chcesz wyplacic.")
elseif wplac > pc.getqf("nasza_kasa") then
say_title(mob_name(20024)..": ")
say("")
say("Nie masz tyle Yang.")
elseif wplac <= pc.getqf("nasza_kasa") then
local warunek = pc.get_money()+wyplac
if warunek >= 2000000000 then
say_title(mob_name(20024)..": ")
say("")
say("Chcesz sobie zbugowac Yang?")
end
pc.change_money(wyplac)
local zapisz = pc.getqf("nasz_kasa")-wyplac
pc.setqf("nasza_kasa", zapisz)
say_title(mob_name(20024)..": ")
say("")
say("Wyplaciles: "..wyplac.." Yang.")
say("Na koncie masz: "..zapisz)
end
end
say_title(mob_name(20024)..": ")
say("")
say("Wplaciles za duzo Yang, albo")
say("za malo lub nie podales samych")
say("cyfr.")
end
say_title(mob_name(20024)..": ")
say("")
say("Znasz swoj PIN?")
elseif zrob_cos == 3 then
say_title(mob_name(20024)..": ")
say("")
say("Na koncie znajduje sie "..pc.getqf("nasza_kasa"))
elseif zrob_cos == 4 then
say_title(mob_name(20024)..": ")
say("")
say("Podaj swoj PIN.")
local podaj_swoj_pin = input()
if podaj_swoj_pin == pc.getqf("nasz_pin") then
say_title(mob_name(20024)..": ")
say("")
say("Poprawny PIN.")
say("")
say("Podaj swoj nowy PIN.")
say("PIN musi miec 5 cyfr.")
local nowy_pin = input()
if nowy_pin > 9999 and nowy_pin <= 99999 then
say_title(mob_name(20024)..": ")
say("")
say("Zostawic taki: "..nowy_pin.." PIN?")
local zostaw_pin = select("Tak", "Nie")
if zostaw_pin == 1 then
pc.setqf("nasz_pin", nowy_pin)
say_title(mob_name(20024)..":")
say("")
say("Twoj nowy PIN to: "..nowy_pin)
end
say_title(mob_name(20024)..": ")
say("")
say("Nie to nie.")
end
say_title(mob_name(20024)..": ")
say("")
say("Nowy PIN jest zly.")
end
say_title(mob_name(20024)..": ")
say("Znasz swoj stary PIN?")
say("A moze jestes oszustem?")
elseif zrob_cos == 5 then
return
end
end
end
end

 

nie umieszczamy linków zewnętrznych.

Opublikowano

To jest setqf, to się różni od czytania z danych z mysql. Gdy próbuje w local porównać ilośc kasy w bazie z ilością wpisywaną, wywala mi błąd że próbuje porównać rzekomo string z liczbą, przy wpisywaniu w tonumber. Jeśli dam zwykły input, to jakoś działa, ale generuje to bug na wpisywanie yang na minus.

 

SYSERR: May 25 17:03:50 :: RunState: LUA_ERROR: [string "player_bank"]:108: attempt to compare string with number

SYSERR: May 25 17:03:50 :: WriteRunningStateToS​yserr: LUA_ERROR: quest player_bank.start click

Opublikowano

@up

mając zmienną a będącą numberem i zmienną b będącą stringiem nie możesz ich porównać. musisz obie sprowadzić do tego samego, więc albo number do stringa za pomocą tostring(zmienna) albo string do number za pomocą tonumber(zmienna)


 

Opublikowano

local actual_gold = query("SELECT money_state FROM player.player_bank WHERE owner_name = '"..owner_name.."';")

local remove_money = tonumber(input(""))

if actual_gold < remove_money then

say_title("Bankier")

--/////////////--

say("Nie masz tyle pieniędzy na koncie!")

 

przy takim układzie pisało, że porównuje string do liczby, choć actual_gold zwraca stan konta, a remove_money wpisaną kwotę, chyba, że jest inaczej

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...