1 mesaj
Membru Ucenic Membru Ucenic
  • Mesaje: 18
  • Reacții: 43
  • Mesaje utile: 0
  • Status: Pierd vremea ^.^
  • Server: www.Cave2.eu
  • Regat: Jinno
  • [ID Discord]
  • Contact:

    Medalii

    [Py] Advanced Color Engine - Selector Culori Personalizate pentru Metin2
    *Descriere:
    Advanced Color Engine - Selector Culori Personalizate pentru Metin2
    Salut. Las aici gratuit un sistem separat pentru client Metin2: culoripersonalizate.py, un Color Picker avansat gandit pentru cei care s-au saturat sa ghiceasca RGB, ARGB, HEX sau alte coduri de culoare.
    Acest sistem nu este dependent de un panel anume. Este gandit ca motor separat si poate fi integrat oriunde: Python root, panel GM, panel admin, editor UI, sisteme pe surse, tag-uri, rank-uri, titluri, nume speciale, badge-uri, shop-uri custom sau orice sistem care are nevoie de o culoare precisa.
    De ce exista:
    Problema e simpla: in multe sisteme vezi doar coduri si trebuie sa ghicesti culoarea. Pentru un developer/admin asta inseamna timp pierdut. Cauti pe net, convertesti, testezi in client, refaci si iar verifici. Advanced Color Engine muta tot procesul direct in client: vezi culoarea, o modifici, primesti codurile si aplici rezultatul.
    Ce stie sa faca:
    - preview live al culorii;
    - slidere pentru H / A / S / V;
    - conversii intre HEX, CHAT, ARGB, RGB, HSV, HSL, CMYK si DEC;
    - input manual pentru mai multe formate;
    - copy pentru codul selectat;
    - nume semantic pentru culoare;
    - callback final cu valoarea ca int ARGB: 0xAARRGGBB;
    - mod diferit pentru GM si player;
    - integrare usoara in alte sisteme.
    Despre AI si partea mea:
    Sintaxa a fost scrisa cu ajutor AI. Dar conceptul, logica, directia, intrebarile, testarea, limitarile si felul in care trebuia sa functioneze sistemul au fost gandite de mine.
    Nu am pornit ca expert de sintaxa. Am pornit de la butoane simple, comenzi banale si UI-uri mici, apoi am inceput sa inteleg cum se leaga un sistem real: stare interna, evenimente, callback-uri, validari, input live, conversii si comportament vizual. AI-ul este o unealta foarte buna daca stii ce vrei si daca verifici ce iti da.
    Fisiere principale:
    Code:
    root/culoripersonalizate.py
    root/boogieclasses.py
    Din boogieclasses.py este necesara clasa:
    Code:
    BoardNouBoogie
    Aceasta este baza vizuala a ferestrei.
    Clarificare despre slidere:
    Sliderele Color Picker-ului sunt definite direct in culoripersonalizate.py:
    Code:
    class BoogieSlider(ui.Window)
    Deci pentru acest release aveti:
    - BoardNouBoogie din boogieclasses.py pentru fereastra;
    - BoogieSlider din culoripersonalizate.py pentru sliderele de culoare.
    Foldere si imagini necesare:
    1. Color Picker:
    Code:
    root/boogie_arhitecture_buttons/culori_personalizate/
    Code:
    curcubeu.tga
    transparenta.tga
    saturatie.tga
    luminozitate.tga
    glisor_culori_personalizate_1.tga
    glisor_culori_personalizate_2.tga
    copy_1.tga
    copy_2.tga
    copy_3.tga
    input_136_33.tga
    2. Buton aplica:
    Code:
    root/boogie_arhitecture_buttons/buttons/new_buttons_medium/
    Code:
    button_normal.tga
    button_hover.tga
    button_down.tga
    3. Board:
    Code:
    root/boogie_arhitecture_buttons/filtrare_iteme/board_nou/
    Code:
    corner_left_top.tga
    corner_left_bottom.tga
    corner_right_top.tga
    corner_right_bottom.tga
    line_left.tga
    line_right.tga
    line_top.tga
    line_bottom.tga
    Board_Base.tga
    4. Close button standard client:
    Code:
    d:/ymir work/ui/public/close_button_01.sub
    d:/ymir work/ui/public/close_button_02.sub
    d:/ymir work/ui/public/close_button_03.sub
    Cum il chemati din sistemul vostru:
    Code:
    import culoripersonalizate
    def OpenColorTool(self):
        self.colorTool = culoripersonalizate.ColorPickerPopup(
            0xFFFFFFFF,
            "Test Culoare",
            self.OnColorSelected
        )
        self.colorTool.SetPosition(300, 200)
        self.colorTool.SetTop()
        self.colorTool.Show()
    def OnColorSelected(self, color):
        # color este int ARGB: 0xAARRGGBB
        pass
    Unde poate fi adaptat:
    - panel GM/admin;
    - titluri si tag-uri;
    - rank-uri;
    - nume colorate;
    - badge-uri;
    - shop-uri custom;
    - editor UI;
    - configuratoare;
    - sisteme pe surse;
    - orice sistem care primeste o culoare ARGB.
    Ce poate fi imbunatatit:
    Sistemul este functional si bun ca baza, dar nu il prezint ca perfect.
    Zone unde se poate lucra:
    - input live poate fi sincronizat mai strict;
    - unele valori scrise manual pot muta sliderul, dar nu actualizeaza perfect preview-ul/numele/toate output-urile;
    - validarile HSV/HSL/CMYK pot fi facute mai stricte;
    - clipboard-ul poate fi abstractizat;
    - se pot adauga palete favorite;
    - se poate face salvare/import/export de culori;
    - se poate integra direct in surse.
    Am vazut aceste zone. Nu sunt acolo pentru ca nu au fost observate. Sunt lasate si ca punct de lucru pentru cei care vor sa invete si sa duca mai departe arhitectura.

    Daca esti developer si vrei sa integrezi sistemul corect, aici este explicatia mai adanca. Nu este doar un UI cu niste poze. Este un mic motor de conversie, sincronizare si state-machine construit peste UI-ul Metin2.
    1. Iluzionismul matematic
    Code:
    Translate_Slider_To_Real
    Translate_Real_To_Slider
    Problema: daca playerul duce saturatia sau valoarea prea jos, poate ajunge la culori moarte, foarte inchise sau aproape inutile. Daca ii tai sliderul vizual la 80%, arata urat si pare limitare fortata.
    Solutia: sliderul poate arata 0%-100%, dar motorul intern poate lucra cu 71%-100%. Cand playerul vede 0%, motorul primeste 0.71. Cand motorul are 0.71, sliderul poate fi afisat inapoi ca 0%. Pentru GM, translatia dispare si valorile sunt brute.
    Asta pastreaza UX-ul curat, dar protejeaza rezultatul final.
    2. Kernelul matematic multi-space
    Code:
    boogie_hsv_to_rgb
    boogie_rgb_to_hsv
    boogie_rgb_to_hsl
    boogie_hsl_to_rgb
    boogie_rgb_to_cmyk
    Aceste functii sunt nucleul conversiilor. Sliderele lucreaza natural in zona HSV/HASV, dar developerul are nevoie de RGB, ARGB, HEX, HSL, CMYK, DEC si cod chat.
    Conversiile sunt facute direct in fisier, fara dependinte externe. Asta da control asupra formulelor si evita dependente inutile intr-un client Metin2.
    Valorile mici conteaza. In multe convertoare online, 0.699999 devine simplu 0.7. Aici ideea a fost sa pastrez cat mai mult din precizie, mai ales cand lucrezi cu alpha, saturatie si luminozitate.
    3. Triple-Sync / State-Machine
    Code:
    __OnSliderUpdate
    __UpdateAllOutputs
    __ProcessManualInput
    Aici este partea sensibila. Sliderul schimba input-ul. Input-ul poate schimba sliderul. Ambele trebuie sa schimbe preview-ul si codurile. Daca nu controlezi fluxul, faci bucla infinita sau UI care se rescrie singur aiurea.
    Piesa principala:
    Code:
    self.sync_lock
    sync_lock este paznicul. Cand sistemul actualizeaza ceva programatic, lock-ul opreste update-urile inverse nedorite. Fara el, un slider ar putea declansa input-ul, input-ul ar declansa iar sliderul si tot asa.
    Memoria pentru input:
    Code:
    self.last_manual_text
    Aceasta tine ultima valoare cunoscuta. Ajuta la curatarea input-ului si la evitarea rescrierilor agresive cand utilizatorul tasteaza.
    4. Input Live si zona ramasa de optimizat
    Input Live este partea cea mai interesanta si cea mai sensibila. Daca scrii manual valori, uneori sliderul se misca unde trebuie, dar restul sistemului nu se sincronizeaza perfect: preview-ul, numele culorii sau unele output-uri pot ramane in urma.
    Fluxul de verificat:
    Code:
    manual input
    -> __ProcessManualInput
    -> SetValue pe slidere
    -> __OnSliderUpdate
    -> __UpdateAllOutputs
    Cine vrea sa polish-uiasca sistemul trebuie sa faca acest traseu complet atomic: orice input valid trebuie sa actualizeze sliderul, temp_color, preview-ul, numele culorii, toate formatele si callback-ul final.
    5. Semantic Mapping Engine
    Code:
    __GetDynamicColorName(h, s, v, a)
    In loc sa folosesc un dictionar urias de HEX -> nume culoare, sistemul genereaza numele algoritmic.
    Logica:
    - intai verifica alpha;
    - apoi verifica negru/alb/gri;
    - apoi transforma hue-ul in grade 0-360;
    - alege familia de culoare;
    - aplica modificatori dupa saturatie si valoare;
    - adauga intensitate;
    - trateaza cazuri speciale: aur, bronz, cupru, midnight etc.
    Rezultatul este un nume descriptiv, de exemplu:
    Code:
    Turcoaz-Acvatic Fluorescent Orbitor
    6. BoogieSlider
    Code:
    class BoogieSlider(ui.Window)
    Nu foloseste sliderul clasic Ymir. Este un slider custom cu:
    - bara vizuala;
    - DragButton;
    - restrictie pe axa X;
    - calcul pixel -> procent;
    - callback la miscare;
    - reparatie pentru hover si release.
    Butonul are zona de miscare calculata pe bara de 281px, iar valoarea finala este normalizata intre 0.0 si 1.0.
    7. FormatHitBox si selectia formatului
    Code:
    class FormatHitBox(ui.Window)
    TextLine-urile din Metin2 nu sunt gandite ca zone interactive complete. FormatHitBox rezolva asta printr-un strat clickabil peste text. Astfel poti selecta formatul dorit pentru copiere.
    8. Clipboard-ul
    Code:
    __OnClickHeaderCopy
    Metin2 nu ofera elegant copy-to-clipboard pentru orice TextLine. Solutia folosita:
    Code:
    cmd /c <nul set /p "=TEXT" | clip
    Se porneste procesul prin:
    Code:
    _subprocess.CreateProcess
    si exista fallback:
    Code:
    os.popen
    Este gandit pentru Windows, adica mediul clasic al clientului Metin2.
    9. Structura datelor interne
    Code:
    self.sliders
    self.format_static
    self.format_inputs
    self.pct_labels
    self.selection_bgs
    self.hitboxes
    self.grid_lines
    self.labels
    self.input_bgs
    Roluri:
    - sliders: tine obiectele H/A/S/V;
    - format_static: tine textele generate automat;
    - format_inputs: tine casetele editabile;
    - pct_labels: tine procentele afisate;
    - selection_bgs: highlight-ul selectiei;
    - hitboxes: zonele clickabile;
    - grid_lines: liniile tabelului;
    - labels: label-uri UI;
    - input_bgs: fundalurile input-urilor.
    10. ColorPickerPopup ca punct de integrare
    Code:
    ColorPickerPopup(initial_color, target_name, apply_callback)
    Acesta este contractul public. Daca vrei sa folosesti sistemul, nu trebuie sa intelegi tot internul din prima. Trebuie doar sa ii dai:
    - culoare initiala;
    - nume pentru titlu;
    - functie callback.
    La final primesti:
    Code:
    color = 0xAARRGGBB
    Concluzie pentru developeri
    Acest fisier este mai mult decat un Color Picker. Este un exemplu de UI state-machine in client Metin2, cu conversii matematice, input live, protectie la recursion loop, clipboard, hitbox-uri si mapping semantic al culorilor.
    Il puteti folosi direct sau il puteti rupe in bucati: motorul matematic separat, sliderul separat, mapping-ul de nume separat, logica de copy separat.

    Nu este doar copy-paste
    Daca esti incepator, poti invata mult din el. Dar trebuie sa citesti, sa testezi si sa intelegi fluxul. Nu este doar un UI banal. Sunt formule, conversii, stare interna, focus lock, callback, input live, slidere, mapping pentru player si GM, plus generare dinamica de nume pentru culori.
    *Poze / Video (obligatoriu):
    [Py] Advanced Color Engine - Selector Culori Personalizate pentru Metin2 - Mesaj 1 - Imagine 1
    [Py] Advanced Color Engine - Selector Culori Personalizate pentru Metin2 - Mesaj 1 - Imagine 2 *Link download: *Link scanare VirusTotal (obligatoriu):
    Scanare VirusTotal
    Pentru scanare: uploadati arhiva finala pe:
    https://www.virustotal.com/gui/home/upload
    Daca modificati arhiva dupa scanare, refaceti scanarea.
    Credit:
    Concept, logica, idee, testare, directie si decizii: Vaduva Liviu Bogdan / Boogie / L3oogie.
    Sintaxa Python/UI: realizata cu ajutor AI, dar condusa dupa logica mea si dupa probleme reale vazute in client.

    Nou Cum descarc de pe TeraBox?

    Afișează detalii Ascunde detalii
    • Este asemănător cu Mega.nz
    • Instalați-vă clientul lor de Download de aici
    • Faceți-vă un cont (vă puteți loga cu Facebook / Google / etc)
    • Nou Dacă nu vreți să descărcați clientul de Download, folosiți acest site
    • Gata! Acum puteți descărca resursele rapid & simplu.

    De ce folosim TeraBox?

    • Este gratuit
    • Primești 1TB de spațiu gratuit la orice cont creat!
    • Este ușor de folosit și varianta premium este foarte ieftină
    • Fișierele nu sunt șterse niciodată
    TeraBox logo

    🔥 Hai pe Discord! - Chat activ și support direct

    Te așteptăm și pe serverul de Discord - aici ne-am strâns toată comunitatea de Metin2 din România.

    Alătură-te acum!
    Suntem aproape: 
    Robot Discord
    Roboțelu'
    Anunț

    Creează-ți un cont sau autentifică-te pentru a participa la discuție

    Trebuie să fii membru pentru a răspunde

    Creează-ți un cont

    Membrii pot crea subiecte noi și pot descărca resurse Metin2 Gratuit!


    Te poți înregistra sau conecta rapid utilizând contul tău de Discord, Github sau Google.

    Înregistrare

    Autentifică-te

    Înapoi la “Sisteme Metin2”

    Informații

    Utilizatori ce navighează pe acest forum: DarkGore, Majestic-12 [Bot], metin2_lovers și 8 vizitatori

    Discord ID copiat: