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

Edycja BLOB'ów.


Rekomendowane odpowiedzi

Opublikowano

Jak zbudować zapytanie SQL dla  skill_level w player, żeby zapytaniem zmienić poziomy umiejętności postaci?

Odczytać jeszcze jakoś idzie, ale nie mogę się odnaleźć, w takim ciągu:

 

fragment przycięty z bazy:

 

 

(...)0/0/0/0/0/0/0/0/0/0/0/0/0/0(...)

 

arijh2.jpg

Opublikowano

Kolega wyżej chyba nie ma pojęcia co pisze. Gdyby to było takie proste to bym się nie pytał.

 

Gdzie w takim UPDATE jest odwołanie do id skilla i poziomu? :)

arijh2.jpg

Opublikowano

Kolega wyżej chyba nie ma pojęcia co pisze. Gdyby to było takie proste to bym się nie pytał.

 

Gdzie w takim UPDATE jest odwołanie do id skilla i poziomu? :)

 

Napisz jaśniej bo nie rozumiem oco chodzi.

Opublikowano

player.skill_level ma tyb danych BLOB

Kiedy użyjemy zwykłego zapytania SQL, by je odczytać otrzymamy taki rezultat:



Po odczytaniu pola SELECT CAST(pole)
otrzymamy wynik bloba w takiej postaci:


i moje pytanie brzmi właśnie, jak tu kurde ustawić / zbudować UPDATE, żeby sobie na lajcie zmieniać poziomy skilli przez SQL.

arijh2.jpg

Opublikowano

Dodaj sobie nową roboczą kolumnę text, skopiuj wartości z BLOB do niej konwertując jednocześnie w cast do utf-8. Na tej kolumnie później prowadzisz działania. Myślę, że powinno działać w taki sposób.

Opublikowano

@Up, też tego próbowałem, ale to też nie ta metoda, ale dzięki za wskazówkę.

Nie mam dostępu do source'a, ale przypuszczam, że to jest BLOB z tekstem i każdy slash ( / ) jest separatorem ciągu, z którego game sobie zczytuje indeks i wartość.

arijh2.jpg

Opublikowano

Jak zrobiłem dump player to skill_level:

0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011600000000001100000000000000000000011B00000000000100000000011C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000200000000000A00000000000800000000000000000000011400000000000000000000011400000000011500000000011500000000000A00000000000000000000000000000000000000000000000000000000000000000000000A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Dla mnie to bardziej hex.

 

Teraz usuwasz 0x na początku i np Szaman Healer ma zapisane skille od 1273 znaku.

Wyżej masz 116 jest to postaci posiadającej pierwszy skill healera na M3 - 22. 22(dec) = 16(hex).

Ostatni skill postaci jest na m9 (28). 28(dec) = 1C(hex). W zapisie wyżej masz 11C.

 

Wychodzi na to że 1 jest że mamy skill na poziomie Master (nie sprawdzałem na G&P), a potem jego poziom. Musiałbyś sobie ogarnać jakiś range dla skilli każdej postaci i polecieć z tematem.

 

Dla postaci Szaman Healer z skillami na poziomach (w kolejności odpowiedniej): M3, 17, 0, M8, 1, M9

Jest taki zapis: 

11600000000001100000000000000000000011B00000000000100000000011C

 

Czyli:
116 - 1 = skill na M, 16 = 22 lv

011 - 0 = skill norm, 11 = 17 lv

11B - 1 = skill na M, 1B = 27 lv

001 - 0 = skill norm, 01 = 1 lv

11C - 1 = skill na M, 1C = 28 lv

 

Nie jest to trudne, wystarczy ogarnąc range, wiedzieć że każdy skill jest oddzielony przez 9 zer, a następnie przekonwertować hex na dec i masz poziom.

 

Więc logicznie aby edytowac możesz pobrać hex, przerobić go odpowiedno a potem dać update.

 

Opublikowano

Faktycznie proste do zrozumienia, choć nie ukrywam, że dla mnie trochę dziwne rozwiązanie. Sądzę, że dużo lepiej by było poziomy skilli trzymać w innej tabelce, albo zastosować rozwiązanie takie jak w mob_proto ze skillami bossów.

 

(Ps. Sorry Endy za atak w Twoim temacie z dropem dla PT, trochę mnie poniosło i popiłem, no i generalnie nie lubię, gdy ktoś patrzy na mnie "z góry" tylko dlatego, że moje rozwiązania są "kilka kroków wstecz" za innymi.

 

Krata browca na zgodę?

a8812ab03586.jpg).

arijh2.jpg

Opublikowano

Jak zrobiłem dump player to skill_level:

0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011600000000001100000000000000000000011B00000000000100000000011C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000200000000000A00000000000800000000000000000000011400000000000000000000011400000000011500000000011500000000000A00000000000000000000000000000000000000000000000000000000000000000000000A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Dla mnie to bardziej hex.

 

Teraz usuwasz 0x na początku i np Szaman Healer ma zapisane skille od 1273 znaku.

Wyżej masz 116 jest to postaci posiadającej pierwszy skill healera na M3 - 22. 22(dec) = 16(hex).

Ostatni skill postaci jest na m9 (28). 28(dec) = 1C(hex). W zapisie wyżej masz 11C.

 

Wychodzi na to że 1 jest że mamy skill na poziomie Master (nie sprawdzałem na G&P), a potem jego poziom. Musiałbyś sobie ogarnać jakiś range dla skilli każdej postaci i polecieć z tematem.

 

Dla postaci Szaman Healer z skillami na poziomach (w kolejności odpowiedniej): M3, 17, 0, M8, 1, M9

Jest taki zapis: 

11600000000001100000000000000000000011B00000000000100000000011C

 

Czyli:

116 - 1 = skill na M, 16 = 22 lv

011 - 0 = skill norm, 11 = 17 lv

11B - 1 = skill na M, 1B = 27 lv

001 - 0 = skill norm, 01 = 1 lv

11C - 1 = skill na M, 1C = 28 lv

 

Nie jest to trudne, wystarczy ogarnąc range, wiedzieć że każdy skill jest oddzielony przez 9 zer, a następnie przekonwertować hex na dec i masz poziom.

 

Więc logicznie aby edytowac możesz pobrać hex, przerobić go odpowiedno a potem dać update.

Generalnie skill_level to lista typu struct SPlayerSkill. Ta struktura składa się z trzech pól: bMasterType i bLevel, oba typu BYTE (1 bajt w pamięci) i time_t tNextRead (4 bajty). Zatem definicja każdego skilla w tej kolumnie zajmuje 6 bajtów. Pierwsze 6 bajtów definiuje skill o id 0, kolejne 6 skill o id 1, kolejne 6 skill o id 2 itd. Można zatem powiedzieć, że pozycja każdego skilla w tej kolumnie określana jest wzorem 6*SKILL_VNUM, gdzie skill_vnum jest zawarte w skill_proto. bMasterType przyjmuje wartości z zakresu 0 - 3 (0 punkty, 1 m, 2 g i 3 p), a tNextRead przechowuje dane o następnym możliwym treningu bez zwoju egzorcyzmu (te cztery bajty należy interpretować jako jedną wartość liczbową). Tyle jeśli chodzi o układ danych w tym blobie.

 

Co do edycji, najpierw zacytuję oficjalny podręcznik MySQL:

 

BLOB values are treated as binary strings (byte strings). They have no character set, and sorting and comparison are based on the numeric values of the bytes in column values. TEXT values are treated as nonbinary strings (character strings). They have a character set, and values are sorted and compared based on the collation of the character set.

Ponieważ są to ciągi binarne, nie mają określonego kodowania. Każdy bajt przyjmuje wartości z zakresu od 0x00 do 0xFF (dec od 0 do 255). Spróbuj zatem skonwertować całą kolumnę na zapis w HEX (liczbowy!) i jako taki go edytować i updateować. Rzuć też okiem na to http://stackoverflow.com/questions/2626477/generating-mysql-update-statements-containing-blob-image-data , może okazać się przydatne.

 

btw, szacun za perełkę  B)

57199140501148694665.png

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...