Jump to content

Tworzenie postaci...


Recommended Posts

Witam!

Tworzę serwer RP(pewnie jak skończe to was zaproszę xD ). Robię panel logowania z rejestracją oraz tworzeniem i wybraniem postaci.

Pytanie : Jak przypisać postać do danego konta? Chodzi mi o to, że klikne "Stwórz" i w tedy pobiera z editów (i jednego memo) text i przypisuje w setElementData... może to być nie do końca zrozumiałe. Chce zrobić żeby można było stworzyć max 4 postacie. Wyobraźnie ponoć mam wysoko-rozwiniętą...ale nie pozwala mi tego wymyślić xD.

Z góry dziękuję.

Link to comment

Nie polecam wykorzystywania wbudowanego mechanizmu autoryzacji i przechowywania danych graczy. Jest tam kilka niedociągnięć, poza tym baza lubi się wysypać w najmniej spodziewanym momencie - mi to się zdarzyło jak na serwerze zarejestrowało się kilkadziesiąt tysięcy graczy. Od tego czasu wszystkie dane graczy przechowuje w bazie SQL, a jedyne konto w wbudowanym mechanizmie autoryzacji należy do administatorów, którzy potrzebują dostępu do takich funkcji jak restartowanie zasobów.

Nie mniej jednak jeśli chcesz się oprzeć na tym mechanizmie, powinieneś stworzyć sobie strukturę danych przechowującą postacie i zapisywać ją w account data, np.:

Zapisywanie wszystkich postaci:

  
local postacie={ 
 {imie="Stefan", nazwisko="Batory", skin=12, kasa=31337, ostatnia_pozycja={0,0,5} }, 
 {imie="Amelia", nazwisko="Poulain", skin=33, kasa=0, ostatnia_pozycja={100,200,10} }, 
} 
setAccountData(getPlayerAccount(plr), "postacie", postacie) 
  

Wczytywanie jednej postaci i zapisywanie jej w element data do dostępu w trakcie trwania sesji użytkownika po stronie server i client side:

  
local function wczytajPostac(plr,numer_postaci){ 
 local postacie=getAccountData(getPlayerAccount(plr), "postacie") 
 if not postacie then return false, "Ten gracz nie ma żadnych postaci" end 
 if not postacie[numer_postaci] then  
  return false, "Nie odnaleziono postaci o danym ID"  
 end 
 setElementData(plr, "postac", postacie[numer_postaci]) 
 setElementData(plr, "numer_postaci", numer_postaci) 
 return true 
} 
  

Przyklad zapisu wczesniej wczytanej postaci przy wyjsciu z serwera:

  
local function zapiszPostac(plr) 
 local numer_postaci=getElementData(plr,"numer_postaci") 
 local postac=getElementData(plr, "postac") 
 if not numer_postaci or not postac then return false end -- gracz nie mial wczytanej postaci 
  
 -- aktualizacja niektorych danych 
 postac.ostatnia_pozycja = getElementPosition(plr) 
 postac.kasa = getPlayerMoney(plr) 
  
 -- zapis do account data 
 local postacie=getAccountData(getPlayerAccount(plr)) 
 postacie[numer_postaci]=postac 
 setAccountData(getPlayerAccount(plr), "postacie", postacie) 
  
 return true 
end 
  
addEventHandler("onPlayerQuit", root, function() 
 if zapiszPostac(source) then 
  outputChatBox("Zapisano postać gracza ".. getPlayerName(source)) 
 end 
end) 
  

Powyższy kod to tylko koncepcja, do dalszego rozwoju.

Jeśli zdecydujesz się na stworzenie postaci w zewnętrznej bazie danych SQL to zerknij do tego projektu: https://github.com/lpiob/MTA-XyzzyRP - znajdziesz tam i struktury tabel przechowywujące użytkowników, ich postacie jak i np. ekwipunek, a także cały kod z tym związany.

Link to comment

Pomożesz dalej ? Nie wiem za co się zabrać xD Znowu rzuciłem się na głęboką wodę :/

Chcę zrobić panel logowania....Logowanie, Rejestracja, Wybór Postaci, Tworzenie Postaci. Wszystko to w gui (zamiast gui mam zrobione obrazki w photoshopie). Już nie zależy mi na setElementData (wywalało mi takie błędy, że szkoda gadać). Może to być pod MySQL tylko nie wiem wogóle jak się połączyć z bazą, jak coś do niej zapisać - wogóle niczego co jest związane z SQL zrobić nie umiem. Proszę o dokładne wytłumaczenie wszystkiego od początku. Z góry dziękuję za chęci i czas mi poświęcany (a trochę go na mnie tracicie xD).

Link to comment

Musisz nauczyć się eksperymentować, analizować swoje błędy i wyszukiwać odpowiedzi. Nawet jakby ktoś Ci tu dał całkowity gotowiec, to co Ci po nim jak nie będziesz wiedział jak działa?

Chętnie postaramy Ci się pomóc, ale musisz zadawać konkretne pytania, najlepiej w osobnych wątkach.

Link to comment

Oj Maciek, a taki wielki programista byłeś ;] Jeżeli chcesz się czegoś nauczyć to:

1) nie rzucaj się na głęboką wodę - po kolei pisz skrypty coraz bardziej zaawansowane i coraz bardziej rozubodowane. od zera rozbudowanego nie stworzysz

2) naucz się angielskiego - bez tego niektórzy Ci powiedzą, że będzie ok, ale to zupełnie inny świat jak masz dostęp do materiałów w języku angielskim

3) czytaj manuale, korzystaj z wyszukiwarek - niektórym nawet nie chce się odpisać "było, poszukaj", kiedy ktoś zadaje pytania zbyt banalne, z kolei nie wszyscy też będą poświęcać czas na gościa, który wpadnie i wypisze listę rzeczy, które chce zrobić, a potem powie "nauczucie mnie"

Link to comment
Oj Maciek, a taki wielki programista byłeś ;]

Nie uważam się za nawet dobrego programiste...to jedynie twoje zdanie :)

1) nie rzucaj się na głęboką wodę

Już od dawna o tym wiem... a ja uparty.

2) naucz się angielskiego

Angielski jest izi...i po angielsku mogę rozmawiać.

niektórym nawet nie chce się odpisać "było, poszukaj"

Zauważyłem.

z kolei nie wszyscy też będą poświęcać czas na gościa, który wpadnie i wypisze listę rzeczy, które chce zrobić, a potem powie "nauczucie mnie"

Yyy...że mnie na myśli miałeś? Nie wpadłem i powiedziałem "nauczcie mnie". Poprosiłem jedynie o wytłumaczenie o co w tym całym MySQL chodzi...poradnik (link) też by wystarczy, a ty takie coś od razu.

Z góry dzięki za chęci. Temat myślę, że można zamknąć.

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...