Jump to content

Recommended Posts

Posted (edited)

Καλησπέρα σε όλους τους φίλους εδώ στο Maxcheaters!

 

Αυτόν τον καιρό έχω αρχίσει να ξανά ασχολούμε με την Java γλώσσα, και μαθαίνω κάποια πράγματα. Έτσι, θέλω να μοιραστώ μαζί σας κάποια από τα βήματα που κάνω για να μάθω, και ελπίζω να σας φανεί χρήσιμο!

Δεν θα γράψω τίποτα σπουδαία πράγματα, απλά θα μεταφέρω κάποια από αυτά που μαθαίνω. Για τον λόγο ότι, υπάρχει ένας οδηγός στα Shares and Files, αλλά είναι στα αγγλικά.
Εγώ δεν γνωρίζω αγγλικά, ίσως αυτό το πρόβλημα να το έχουν και άλλοι. Οπότε, θα μεταφέρω δικά μου πράγματα...

(Θα προσπαθώ να βρίσκω χρόνο, και να βάζω περισσότερα πράγματα, και πιο χρήσιμα ακόμη).

Απλώς, το Ελληνικό Section, έχει νεκρώσει κάπως, και αφού ένας "πολύ" έμπειρος δεν βοηθάει, ας κάνω την αρχή, και όποιος θέλει να βοηθήσει με τις γνώσεις του, γράφει replay από κάτω, και τον ανεβάζω με Quote.

Έστω και 1 γνώση του καθένα, θα βοηθήσει πολλούς όταν γίνουν 10. ;)

 

Ας αρχίσουμε...

 

============================================================= 1o ΜΕΡΟΣ:

Καταρχάς χρειαζόμαστε Eclipse και ένα SVN ενός Project, για να μπορέσουμε να εργαστούμε σε αυτό που θέλουμε...

Δείτε τον παρακάτω οδηγό για το πως να κάνουμε Compile με το Eclipse, και θα το καταφέρετε...

Πως Να Κάνεις Compile & Πως Περνάς Έναν Java Code!

 

Παρακάτω θα δείξω, πως μπορούμε να κάνουμε ένα συγκεκριμένο Class, να πάρει κάποιο Item που θέλουμε όταν πάρει το πρώτο του Pvp... (θα ήταν ανούσιο το να δείξω για όλους τους χαρακτήρες, άμα δε μπορούμε να τσεκάρουμε μόνο έναν).

Εδώ είναι το κομμάτι Java που χρειαζόμαστε να επεξεργαστούμε για να το κάνουμε... L2PcIstance.java

 

Πως τσεκάρουμε το οποιοδήποτε Class?

Δείτε παρακάτω μερικά Class σαν παράδειγμα..

if(getClassId() == ClassId.sagittarius)
if(getClassId() == ClassId.duelist)
if(getClassId() == ClassId.dreadnought)
if(getClassId() == ClassId.phoenixKnight)
if(getClassId() == ClassId.hellKnight)

Εδώ τώρα... Όπως βλέπουμε, μας λέει ότι "εάν ο παίχτης παίρνει το ClassId, το οποίο είναι π.χ sagittarius"

Ας πάρουμε αυτό το κομμάτι, και να το εμπλουτίσουμε με τις σωστές εντολές. Γιατί έτσι από μόνο του είναι άχρηστο... Π.χ.. Αν ο παίχτης είναι Sagi, τι? Τίποτα!

Το πέρνουμε και αρχίζουμε γράφουμε...

 

   if (getPvpKills() == 1) Εάν πάρει το πρώτο του pvp, δηλαδή πάρει 1 PvpKills (μετά το 1ο δε παίρνει τίποτα)
   {

   if(getClassId() == ClassId.sagittarius) Όπως είπαμε.. Αν το χαρακτήρας είναι Sagittarius
   {
   addItem("Draconic Bow", 7577, 1, this, true); Εδώ θα πάρει 1 Draconic Bow
   addItem("Euro", 57, 1000000, this, true); Εδώ, θα πάρει 1κκ Euro(Adena).
   sendMessage("Κουφάλα! Πήρες δώρο ένα Dc Bow(Focus) και 1kk Adena."); Εδώ, του έρχεται το μήνυμα που θέλουμε να λέει.
   }

   }

 

Τώρα, πάμε να κάνουμε ακριβώς το αντίθετο.. Δηλαδή να πάρουν όλοι οι άλλοι, εκτός του Saggitarius.

(Είναι πολύ σημαντικό αυτό, και θα καταλάβεται γιατί το κάνω...)

Λοιπόν... Όποτε σε έναν κώδικα συναντάμε την ένδειξη "  ! " σημαίνει το αντίθετο.. Δηλαδη...

 

   if (getPvpKills() == 1) Εάν πάρει το πρώτο του pvp, δηλαδή πάρει 1 PvpKills (μετά το 1ο δε παίρνει τίποτα)

   {

   if(getClassId() != ClassId.sagittarius) Όταν ένας χαρακτήρας, δεν είναι Saittarius..
   {
   addItem("Gold Bar", 3470, 1, this, true); Εδώ θα πάρει 1 Gold Bar
   addItem("Euro", 57, 1000000, this, true); Εδώ, θα πάρει 1κκ Euro(Adena).
   sendMessage("Κουφάλα! Πήρες δώρο ένα Gold Bar και 1kk Adena."); Εδώ, του έρχεται το μήνυμα που θέλουμε να λέει.

 

Ε. Ωραία αυτά... Όμως πως κάνουμε να πάρουν όλοι οι Fighter κάτι, αλλά οι Mage κάτι άλλο?

 

Α. Εφόσον με τα παραπάνω ήμαστε οκ, και καταλάβαμε πως πάει το πράγμα, τότε διαβάστε τον παρακάτω κώδικα...

 

   if (getPvpKills() == 1)
   {
   if (!isMageClass()) Δηλαδή εάν δεν είναι μάγος..
   {
   addItem("Angel Slayer", 6367, 1, this, true);
   sendMessage("Μόλις πήρες ένα Angel Slayer");
   }
  else Εδώ τώρα... προσθέσαμε το else, οπότε, οι άλλοι θα πάρουν τα παραπάνω, και ο μάγος τα παρακάτω. (Δηλαδή, αν πάρει ο μάγος το πρώτο του PvpKill, μόνο αυτός θα πάρει το Arcana Acumen..
   {
  addItem("Arcana Mace Acumen", 6608, 1, this, true);
  sendMessage("Μόλις πήρες ένα Arcana mace Acumen);
  }
  }
  }

 

Εάν βγάλουμε τελειώς το if (!isMageClass()), και όλες τις γραμμές από else και κάτω... Θα πάρουν όλοι αυτά τα Item. Δηλαδή να γίνει κάπως έτσι ο κώδικας...

if (getPvpKills() == 1)
    {
     {
      addItem("Angel Slayer", 6367, 1, this, true);
      sendMessage("Μόλις πήρες ένα Angel Slayer");
     }
    }

Ε. Πως μπορούμε να κάνουμε να παίρνει σε κάθε Pvp κάποιο Item?

Α. Εδώ, απλά θα πρέπει να αλλάξουμε τα " == " που σημαίνουν απόλυτα το συγκεκριμένο πράγμα... Δηλαδή αν είναι (item.getItemId() == 6367, τότε σημαίνει απόλυτα γι'αυτό το Item. Το αλλάζουμε λοιπόν,  με την ένδειξη " >= " που σημαίνει αυτού του, και μεγαλύτερου...

Οπότε ο κώδικας μας γίνεται κάπως έτσι...

if (getPvpKills() >= 1)
    {
     {
      addItem("Angel Slayer", 6367, 1, this, true);
      sendMessage("Μόλις πήρες ένα Angel Slayer");
     }
    }

Πάμε τώρα να επεξεργαστούμε κάτι άλλο για πλάκα, για να μπούμε λίγο περισσότερο στο νόημα....

Ας μάθουμε πως δίνουμε ένα Item στην μπάρα ας πούμε F9 του χαρακτήρα να το βρει όταν μπει..

Πάμε, Gameserver/network/clientpackets/CharacterCreate.java

 

Κάνουμε αναζήτηση για: newChar.registerShortCut(new L2ShortCut(11, 0, 1, item.getObjectId(), -1, 1));

Αφού το βρήκαμε, αφήνουμε ένα κενό, και βάζουμε το παρακάτω:

+ if (item.getItemId() == 6367) Εδώ μας λέει... Ότι, αν το Item, έχει το ID 6367(Angel Slayer), τότε αυτό θα μπει στη μπάρα.
+    newChar.registerShortCut(new L2ShortCut(8, 0, 1, item.getObjectId(), -1, 1)); Εδώ, μας δείχνει που θα κάνει εγγραφή, π.χ στο F9. Εκεί θα πάει το Angel Slayer. Βάζουμε 8, για να πάει στο 9.

Τώρα θα γίνει κάπως έτσι μέσα...

 if (item.getItemId() == 5588) // tutorial book shortcut
    newChar.registerShortCut(new L2ShortCut(11, 0, 1, item.getObjectId(), -1, 1));
  
+   if (item.getItemId() == 6367)
+    newChar.registerShortCut(new L2ShortCut(8, 0, 1, item.getObjectId(), -1, 1));

Έτσι λοιπόν, φτιάχνουμε/επεξεργαζόμαστε κάτι δικό μας.. Όπως είπα, δεν είναι κάτι σημαντικό αυτό που ανέφερα... Αλλά ίσως απαντήσει κάποια ερωτήματα..
(Όλα τα παραπάνω αποτελούν παράδειγμα, ασχέτως αν κάτι είναι σε λάθος σειρά ή δεν ισχύει).

 

============================================================= 2o ΜΕΡΟΣ:

Πάμε τώρα να μάθουμε, πως κάνουμε τα παραπάνω με Config.

Είναι σημαντικό να γνωρίζουμε πως να φτιάξουμε ένα δικό μας Config, για έτσι ελέγχουμε αυτό που φτιάξαμε ανα πάσα στιγμή, χωρίς να μπαίνουμε Eclipse όλη την ώρα.

 

 

Ο παρακάτω κώδικας, θα δώσει στους Fighter όταν πάνε στα 100 pvp kills, ένα Fighter Tattoo, ενώ στους μάγους ένα Mage Tattoo.

// Add Fighter or Mage Tattoos
     if (Config.REWARD_TATTOOS_ENABLE)
     {
      if (getPvpKills() == Config.PVP_COUNT)
      {
       if (!isMageClass())
       {
        addItem("Tattoo", Config.TATTOO_FIGHTER_ID, Config.FIGHTER_TATTOO_COUNT, this, true);
        sendMessage("Congratulations! " + Config.PVP_COUNT + "  PvP Kills! You won Fighter Tattoo.");
       }
       else
       {
        addItem("Tattoo", Config.TATTOO_MAGE_ID, Config.MAGE_TATTOO_COUNT, this, true);
        sendMessage("Congratulations! " + Config.PVP_COUNT + "  PvP Kills! You won Mage Tattoo.");
       }
      }
     }

Για να αφήνουμε τα σωστά κενά (πιο πολύ για καλύτερη εικόνα, και διάβασμα του κώδικα είναι αυτό), πατάμε Ctrl - Shift & F
(Ευχαριστώ τον NeverMore' που μου το έμαθε αυτό...)

Όλα αυτά περί PvpKills, τα Item που θέλουμε να δώσουμε, το πόσα Item θέλουμε να δώσουμε και αν θέλουμε να είναι ενεργοποιημένο αυτό το σύστημα, μπορούμε εύκολα να τα επεξεργαστούμε απλά, μέσα από τα Config μας!

 

Πάμε λοιπόν, nes/sf/l2j/Config.java

(Με την ένδειξη " + " είναι όλα αυτά που πρέπει να προσθέσουμε, αυτά που είναι χωρίς " + " απλά υπάρχουν για να ξέρουμε που ακριβώς να πάμε...)

 

Πάμε στα Config του Server μας, και φτιάχνουμε ένα νέο file με όνομα custom.properties. (Βασικά πάρτε ένα έτοιμο Property αρχείο, κάντε το μετανομασία, και απλά σβήνεται ότι έχει μέσα, και βάζετε τα καινούρια.

 

 

   public static final String CLANS_FILE = "./config/clans.properties"; Βρίσκουμε αυτό...
+ public static final String CUSTOMS_FILE = "./config/customs.properties"; Εδώ, είναι το καινούριο property file, που θα φτιάξουμε..

 

Εδώ θα φτιάξουμε τα Config που έχουμε δηλώσει στον κώδικα...

  public static final String SIEGE_FILE = "./config/siege.properties"; Βρίσκουμε αυτό...

+ // Custom Tattoo's

+ /** Fighter Tattoo */
+ public static boolean REWARD_TATTOOS_ENABLE; Λοιπόν.. Εδώ αν προσέξετε στον κώδικα, έχουμε "if (Config.REWARD_TATTOOS_ENABLE)" Δηλαδή, εάν αυτό είναι ενεργοποιημένο, προχωράμε στα παρακάτω βήματα..

+ public static int FIGHTER_TATTOO_COUNT; Εδώ ελέγχει τα πόσα Tattoo θέλουμε να δώσουμε στον Fighter παίχτη... addItem("Tattoo", Config.TATTOO_FIGHTER_ID, Config.FIGHTER_TATTOO_COUNT, this, true);

+ public static int TATTOO_FIGHTER_ID; Εδώ ελέγχει το ID του Item που θέλουμε να δώσουμε στον Fighter παίχτη... addItem("Tattoo", Config.TATTOO_FIGHTER_ID, Config.FIGHTER_TATTOO_COUNT, this, true);
+
+ /** Mage Tattoo */
+ public static int MAGE_TATTOO_COUNT; Εδώ ήμαστε στους μάγους τώρα... Είναι ίδια με τα παραπάνω... Ελέγχει τα πόσα Tattoo θέλουμε να δώσουμε στους μάγους. addItem("Tattoo", Config.TATTOO_MAGE_ID, Config.MAGE_TATTOO_COUNT, this, true);

+ public static int TATTOO_MAGE_ID; Εδώ ελέχγει το ID του Item που θέλουμε να δώσει στον μάγο. addItem("Tattoo", Config.TATTOO_MAGE_ID, Config.MAGE_TATTOO_COUNT, this, true);
+
+ /** Pvp Kills they need */
+ public static int PVP_COUNT; Εδώ ελέγχει τα πόσα PvpKills πρέπει να πάρει ο παίχτης, για να δώσει τα Item. Γι'αυτό και έχουμε βάλει "if (getPvpKills() == Config.PVP_COUNT)"
+
// --------------------------------------------------
// Clans settings
// --------------------------------------------------

 

Πάμε τώρα να βάλουμε και κάτι ακόμη που χρειάζεται για να μπούνε όλα αυτά στο customs.properties αρχείο που φτιάξαμε...

 

REMOVE_CASTLE_CIRCLETS = clans.getProperty("RemoveCastleCirclets", true);
+                       
+    // Custom Tattoo's
+   ExProperties customs = load(CUSTOMS_FILE); Εδώ κάνει εγγραφή το νέο μας Config αρχείο. Δεν θα χρειαστεί στο μέλλον να το ξανά βάλουμε αν θέλουμε απλά να περάσουμε άλλες σειρές στο custom.properties, το βάζουμε μόνο όταν φτιάχνουμε νέο Config αρχείο.
+   /** Fighter Tattoo */

 

Αφού το Config που φτιάξαμε λέγεται customs.properties εκεί που έχω με κόκκινο, θα βάζουμε το όνομα των κάθε config που θέλουμε να τα στείλουμε. Ενώ με πράσινο, σημαίνει πως πηγαίνει σε αυτό το αρχείο. Με πορτοκαλί, γράφουμε τις λέξεις που θα έχουμε μέσα στα Config μας.
+   REWARD_TATTOOS_ENABLE = customs.getProperty("RewardTattooEnable", false);

+   TATTOO_FIGHTER_ID = customs.getProperty("FighterTattooID", 492);

+   /** Mage Tattoo */
+   TATTOO_MAGE_ID = customs.getProperty("MageTattooID", 493);

+   /** Pvp Kills */
+   PVP_COUNT = customs.getProperty("PvpKillsCount", 100);

 

 

Πάμε τώρα μέσα στο custom.properties αρχείο που δημιουργήσαμε και γράφουμε τα παρακάτω...
Με την ένδειξη " # " θα την βάζουμε όταν θέλουμε να δείξουμε κάτι στον άλλον... Μόνο να του εξηγήσουμε τι είναι αυτό το σύστημα.

Εμάς όμως πρώτα, θα πρέπει να μας ενδιαφέρει να βάλουμε σωστά αυτά που έχω με κίτρινα...

 

# Custom Tattoo Fighter/Mage.
# Default: False & 100 Pvp kills.

RewardTattooEnable = false
# Fighter Tattoo
FighterTattooCount = 1
FighterTattooID = 492

# Mage Tattoo.
MageTattooCount = 1
MageTattooID = 493

# Pvp Kills Count.
PvpKillsCount = 100

 

 

Αυτά ήταν παίδες... Δεν είναι κάτι δύσκολο... Για όποια απορία, ρωτήστε και είμαι στην διάθεση σας...

Αύριο αν βρω χρόνο, θα ανεβάσω πως φτιάχνουμε δικό μας voicecommand, είτε για teleport, είτε για Items.

Edited by 'Baggos'
  • Upvote 1
Posted (edited)

 if(!(getClassId() == ClassId.sagittarius))

 

swpa re magka kanei kai tetia i tzava?

Εσύ τι δε κατάλαβες απ'όλα τα παραδείγματα? Δηλαδή έχεις συναντήσει να λέει "Κουφάλα μπλα μπλα"?

5 το πρωί θα με ένοιαζε που μπαίνει? Υποθετικά είναι μικρέ... Σταμάτα να σπαμάρεις για ποστ!

 

Από που ξεφεύγετε εσείς ρε ζώα γαμώτο και έρχεσται εδώ...

Edited by 'Baggos'
Posted

Καταρχάς Βαγγελάρα σόρρυ για αυτό που θα γράψω

 

 

 if(!(getClassId() == ClassId.sagittarius))

 

swpa re magka kanei kai tetia i tzava?

 

και κατά δεύτερον άμα ψάξεις και λίγο στο youtube ή αν δεις το υπόλοιπο φόρουμ εδώ θα καταλάβεις τι άλλα μπορεί να κάνει η java..

Posted (edited)

Καταρχάς Βαγγελάρα σόρρυ για αυτό που θα γράψω

 

 

 

και κατά δεύτερον άμα ψάξεις και λίγο στο youtube ή αν δεις το υπόλοιπο φόρουμ εδώ θα καταλάβεις τι άλλα μπορεί να κάνει η java..

Παραδειγματικό είναι το " ! " στον sagittarius για να καταλάβουν την σημασία του... Γι'αυτό έβαλα τον mage παρακάτω. Έφερα παράδειγμα γι'αυτήν την ένδειξη. Δεν έχω ιδέα αν πηγαίνει στον sagittarius έτσι ακριβώς, ούτε καν που το έχω δοκιμάσει.

Δε θα κρυφτώ ή θα το παίξω ξερόλας, το νόημα θέλω να τυπωθεί. :P

Edited by 'Baggos'
Posted

Βάλε τα κατάλληλα καινά στους κώδικες για να είναι πιο εύκολο να διαβαστούν , εαν δεν ξέρεις πως να το κάνεις πάτα στο eclipse ctrl+shift+f.

Δοκίμασε το και πες μου!

Posted

Καταρχάς Βαγγελάρα σόρρυ για αυτό που θα γράψω

 

 

 

και κατά δεύτερον άμα ψάξεις και λίγο στο youtube ή αν δεις το υπόλοιπο φόρουμ εδώ θα καταλάβεις τι άλλα μπορεί να κάνει η java..

 

 

 

re panivlaka

 if(!(getClassId() == ClassId.sagittarius))

grafete etsi apo kanoniko developer

 if(getClassId() != ClassId.sagittarius)
Posted

 

re panivlaka

 if(!(getClassId() == ClassId.sagittarius))

grafete etsi apo kanoniko developer

 if(getClassId() != ClassId.sagittarius)

 

 

ωραία.. Το παιδί έκανε ένα τυπογραφικό λάθος.. Αυτό δεν σημαίνει ο,τι θα αρχίσεις να πετάς σπόντες και ο,τι άλλο σου κατευένει σε αυτό το μισό μυαλό που διαθέτεις..

 

//End of conversation

 

@`Baggos'

 

Συνέχισε έτσι τρελέ μου! ωραίος οδηγός!!!

Posted

ωραία.. Το παιδί έκανε ένα τυπογραφικό λάθος.. Αυτό δεν σημαίνει ο,τι θα αρχίσεις να πετάς σπόντες και ο,τι άλλο σου κατευένει σε αυτό το μισό μυαλό που διαθέτεις..

 

//End of conversation

 

@`Baggos'

 

Συνέχισε έτσι τρελέ μου! ωραίος οδηγός!!!

Σ'ευχαριστώ ρε αλάνι.. Αν και πρέπει να πάρουμε μαθήματα από τον πιτσιρικά :lol: Το μικρό αγόρι που εκφράζει τα νεύρα του πληκτρολογόντας.. :lol:

Posted (edited)

 

+1 Rep Gia to Topic polli wraia douleia kai mpravo gia ton xrono sou!! :)

Σωστότατο το βίντεο... χαχα..

Σ'ευχαριστώ φίλε.. Μ'αρέσει να βοηθάω να καταλαβαίνονται κάποια πράγματα.. Και αν ένα παράδειγμα βγάζει ένα λάθος.. οκ! Όπως είπα γράφω αυτά που μαθαίνω για να ανέβει λίγο το Ελληνικό section...

Edited by 'Baggos'
Posted

Σωστότατο το βίντεο... χαχα..

Σ'ευχαριστώ φίλε.. Μ'αρέσει να βοηθάω να καταλαβαίνονται κάποια πράγματα.. Και αν ένα παράδειγμα βγάζει ένα λάθος.. οκ! Όπως είπα γράφω αυτά που μαθαίνω για να ανέβει λίγο το Ελληνικό section...

 

Ασε τους βλακες να ψαχνουν για λαθη. Eμενα προσωπικα, που δεν ξερω και πολλα απο coding, με βοηθησε τουλαχιστον να κατανοησω καποια πραγματα.. 

Πολυ ωραια δουλεια!

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


  • Posts

    • Frozen is more popular coz adm can edit npc from client side and no need dig in xml and etc  )
    • Your work is as good as your arrogance. If you didn't break 10 systems to fix 1, I would recommend aCis. Yes, I use aCis and I fixed a lot of things that you left aside to reorganize and rename things. You insist on recommending your broken public project. Don't do that because there are many people who dream of owning a server, and in aCis 409 every dream is broken. I've seen many people break things by using this. aCis 409 doesn't work at the basics. Water movement and flying movements are broken, which is the basics. Seven Sings is completely broken, Sieges need fixing, and worst of all, level 3 and 4 clan quests are bugged, besides other quests that you intentionally broke and still recommend. You are an excellent programmer, but your arrogance in feeling superior to everyone is killing you. Happy New Year to you, and be more transparent and honest when recommending this. I'm not sharing the corrections I made, nor my Geodata system, precisely because of your arrogance. I'll soon post a video of my Geoengine system, which you spent 12 years on and didn't finish. I can send you a list of everything you need to fix, but you're too arrogant for that because you're a superior God and don't accept advice from mortals.
    • Changelog   All notable changes to this project will be documented in this file. [English Version](#english-version) | [Versión en Español](#versión-en-español)   ---   English Version   [1.1.3] - 2026-01-05   Added   Donation System Integration - Integrated comprehensive donation panel into the main CMS - Implemented direct donation system without requiring user login - Added automatic coin crediting directly to character inventory - Created new React component for donation interface with modern design - Implemented real-time coin calculation based on payment method and currency - Added support for multiple payment gateways:   - MercadoPago (ARS)   - PayPal (USD, BRL, EUR)   - PagSeguro (BRL) - Developed new backend endpoint for processing direct donations - Implemented character validation system before payment processing - Added automatic webhook handling for payment confirmations - Created comprehensive logging system for all donation transactions - Implemented bonus system for bulk coin purchases - Added donation history tracking and management   Vote Reward System - Integrated vote reward panel into the CMS - Implemented multi-topsite voting system - Added automatic reward delivery upon vote verification - Created vote tracking and cooldown management - Implemented anti-fraud measures for vote validation - Added vote history and statistics for users - Developed admin panel for vote reward configuration - Implemented automatic vote verification through topsite APIs   Database Enhancements - Created new table structure for donation management (`site_donations`) - Added `auto_credit` field for automatic coin delivery - Implemented balance tracking system (`site_balance`) - Created conversion and transfer logging tables - Added comprehensive indexing for performance optimization - Implemented transaction history tracking   Frontend Improvements - Developed new donation panel component with consistent site design - Added multi-language support (Spanish, English, Portuguese) - Implemented form validation and error handling - Created responsive design for mobile and desktop - Added real-time price calculation display - Implemented loading states and user feedback messages   Backend Infrastructure - Created secure API endpoints for donation processing - Implemented webhook system for payment gateway integration - Added comprehensive error logging and debugging tools - Developed configuration management system - Implemented security measures for sensitive data handling - Added support for sandbox and production environments   Documentation - Created comprehensive production setup guide - Developed security checklist for deployment - Added database setup scripts with detailed instructions - Created API integration documentation - Developed troubleshooting guides - Added configuration examples for all payment gateways   Changed - Updated navigation system to include donation and vote panels - Modified routing to support new panel pages - Enhanced translation system with new text strings - Improved error handling across the application - Updated proxy configuration for backend communication   Security - Implemented credential protection in configuration files - Added example configuration files without sensitive data - Created .htaccess rules for protecting sensitive directories - Implemented webhook signature validation - Added SQL injection prevention measures - Implemented session security enhancements   Technical Details - React 19.2.0 for frontend components - TypeScript for type safety - Vite 6.2.0 for build tooling - PHP 7.4+ for backend processing - SQL Server 2012+ for database management - Integration with MercadoPago SDK - RESTful API architecture   ---   Versión en Español   [1.1.3] - 2026-01-05   Agregado   Integración del Sistema de Donaciones - Integración completa del panel de donaciones al CMS principal - Implementación de sistema de donaciones directas sin requerir inicio de sesión - Agregada acreditación automática de coins directamente al inventario del personaje - Creación de nuevo componente React para interfaz de donaciones con diseño moderno - Implementación de cálculo de coins en tiempo real según método de pago y moneda - Agregado soporte para múltiples pasarelas de pago:   - MercadoPago (ARS)   - PayPal (USD, BRL, EUR)   - PagSeguro (BRL) - Desarrollo de nuevo endpoint backend para procesamiento de donaciones directas - Implementación de sistema de validación de personajes antes del procesamiento de pago - Agregado manejo automático de webhooks para confirmaciones de pago - Creación de sistema completo de logs para todas las transacciones de donación - Implementación de sistema de bonos para compras de coins en volumen - Agregado seguimiento y gestión de historial de donaciones   Sistema de Recompensas por Votación - Integración del panel de recompensas por votación al CMS - Implementación de sistema de votación multi-topsite - Agregada entrega automática de recompensas al verificar votos - Creación de seguimiento de votos y gestión de tiempos de espera - Implementación de medidas anti-fraude para validación de votos - Agregado historial de votos y estadísticas para usuarios - Desarrollo de panel administrativo para configuración de recompensas - Implementación de verificación automática de votos mediante APIs de topsites   Mejoras en Base de Datos - Creación de nueva estructura de tablas para gestión de donaciones (`site_donations`) - Agregado campo `auto_credit` para entrega automática de coins - Implementación de sistema de seguimiento de balance (`site_balance`) - Creación de tablas de registro de conversiones y transferencias - Agregada indexación completa para optimización de rendimiento - Implementación de seguimiento de historial de transacciones   Mejoras en Frontend - Desarrollo de nuevo componente de panel de donaciones con diseño consistente - Agregado soporte multi-idioma (Español, Inglés, Portugués) - Implementación de validación de formularios y manejo de errores - Creación de diseño responsive para móvil y escritorio - Agregada visualización de cálculo de precios en tiempo real - Implementación de estados de carga y mensajes de retroalimentación al usuario   Infraestructura Backend - Creación de endpoints API seguros para procesamiento de donaciones - Implementación de sistema de webhooks para integración con pasarelas de pago - Agregadas herramientas completas de registro de errores y depuración - Desarrollo de sistema de gestión de configuración - Implementación de medidas de seguridad para manejo de datos sensibles - Agregado soporte para entornos sandbox y producción   Documentación - Creación de guía completa de configuración para producción - Desarrollo de checklist de seguridad para despliegue - Agregados scripts de configuración de base de datos con instrucciones detalladas - Creación de documentación de integración de APIs - Desarrollo de guías de solución de problemas - Agregados ejemplos de configuración para todas las pasarelas de pago   Modificado - Actualización del sistema de navegación para incluir paneles de donación y votación - Modificación del enrutamiento para soportar nuevas páginas de paneles - Mejora del sistema de traducciones con nuevas cadenas de texto - Mejora del manejo de errores en toda la aplicación - Actualización de configuración de proxy para comunicación con backend   Seguridad - Implementación de protección de credenciales en archivos de configuración - Agregados archivos de configuración de ejemplo sin datos sensibles - Creación de reglas .htaccess para proteger directorios sensibles - Implementación de validación de firma de webhooks - Agregadas medidas de prevención de inyección SQL - Implementación de mejoras de seguridad en sesiones   Detalles Técnicos - React 19.2.0 para componentes frontend - TypeScript para seguridad de tipos - Vite 6.2.0 para herramientas de construcción - PHP 7.4+ para procesamiento backend - SQL Server 2012+ para gestión de base de datos - Integración con SDK de MercadoPago - Arquitectura API RESTful   ---   Migration Notes / Notas de Migración   For Existing Installations / Para Instalaciones Existentes   **English:** If you are upgrading from a previous version, please follow these steps: 1. Backup your database before applying any changes 2. Run the database migration script (`database_setup.sql`) 3. Update your configuration file with new settings 4. Configure payment gateway credentials 5. Test the donation flow in sandbox mode before going to production 6. Review the security checklist before deployment   **Español:** Si está actualizando desde una versión anterior, siga estos pasos: 1. Realice una copia de seguridad de su base de datos antes de aplicar cambios 2. Ejecute el script de migración de base de datos (`database_setup.sql`) 3. Actualice su archivo de configuración con las nuevas opciones 4. Configure las credenciales de las pasarelas de pago 5. Pruebe el flujo de donaciones en modo sandbox antes de pasar a producción 6. Revise el checklist de seguridad antes del despliegue   ---   Known Issues / Problemas Conocidos   **English:** - Webhook notifications may experience delays during high traffic periods - Some payment gateways require manual configuration of webhook URLs - Character names are case-sensitive in the donation form   **Español:** - Las notificaciones de webhook pueden experimentar retrasos durante períodos de alto tráfico - Algunas pasarelas de pago requieren configuración manual de URLs de webhook - Los nombres de personajes son sensibles a mayúsculas/minúsculas en el formulario de donación   ---   Roadmap / Hoja de Ruta   Planned Features / Características Planeadas   **English:** - Admin dashboard for donation management - Automated refund processing - Subscription-based donations - Gift card system - Enhanced reporting and analytics - Mobile application support   **Español:** - Panel administrativo para gestión de donaciones - Procesamiento automatizado de reembolsos - Donaciones basadas en suscripción - Sistema de tarjetas de regalo - Reportes y análisis mejorados - Soporte para aplicación móvil   ---   Contributors / Contribuidores   This release includes contributions from the development team focused on creating a secure, user-friendly donation and voting system integrated seamlessly with the existing CMS.   Este lanzamiento incluye contribuciones del equipo de desarrollo enfocado en crear un sistema de donaciones y votación seguro y fácil de usar, integrado perfectamente con el CMS existente.   ---   Support / Soporte   **English:** For issues, questions, or feature requests, please refer to: - `PRODUCTION_SETUP_GUIDE.md` for setup instructions - `SECURITY_CHECKLIST.md` for security guidelines - `DONATION_DIRECT_SYSTEM.md` for technical documentation   **Español:** Para problemas, preguntas o solicitudes de características, consulte: - `PRODUCTION_SETUP_GUIDE.md` para instrucciones de configuración - `SECURITY_CHECKLIST.md` para pautas de seguridad - `DONATION_DIRECT_SYSTEM.md` para documentación técnica   ---   License / Licencia   This project maintains its original licensing terms. Please refer to the LICENSE file for details.   Este proyecto mantiene sus términos de licencia originales. Consulte el archivo LICENSE para más detalles.   ---   **Last Updated / Última Actualización:** January 5, 2026   **Version / Versión:** 1.1.3
    • Dragonic 2 – High Five is a fully custom private server, built with an original visual identity and integrated premium systems. We offer a stable, modern, and optimized experience, combining classic High Five gameplay with new features created especially for the community. The server is live and available to all players. You can access the official website here:  https://dragonic2.com/ If you encounter any bugs or issues, please report them so we can fix them as quickly as possible. Join the adventure and discover Dragonic 2 — High Five.
    • aCis (“another Crappy interlude server”) is a commercial project I would not use even if paid. l2jfrozen yes, a 10 year old, effectively dead project produces more reliable results and at least works. l2jhellas also works. aCis might as well be renamed KPMIS (“Keep Paying My Interlude Server”): endless fixes, freemium, and no realistic path to true L2OFF parity, but its recommended like hell. lucera is even better the downside is you just need to dive into code and no sources   lets leave it at that
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock