Jump to content

Recommended Posts

Posted

Μετά τον οδηγό μου,για γενικά πράγματα πάνω στο l2jdeveloping,αποφάσισα σιγά-σιγά να αρχίζω να σας δείχνω κάποιους βασικούς όρους στην java,που θα σας φανούνε πάρα πολύ χρήσιμοι όταν αρχίζεται σιγά σιγά να φτιάχνετε τους δικούς σας κώδικες.Λοιπόν,ας αρχίσουμε με τον new και στην συνεχεία θα πάμε στο StringTokenizer και τέλος στα εξήσου σημαντικά try,exception(s),finally.

 

(σημείωση: αυτή τη στιγμή δεν είμαι σε pc που έχω eclipse για αυτό το λόγο δεν μπορώ να σας δείνω παραδείγματα με κώδικες απο l2j,αλλά να είστε σίγουρη ότι πραγματικά είναι πολύ πιο χρήσιμο να ξέρεις java παρά l2j(όχι πως έχει μεγάλη σημασία) πάντως δεν σας φοβάμαι,πιστεύω οτι θα καταφέρετε να το προσαρμόσετε και στο l2j(δεν έχει και καμία μεγάλη διαφορά,μην ψαρώνεται),πιθανώς όταν πάω στο pc μου,να το κάνω update με l2j παραδείγματα).

 

Chapters:

[*]Χρήση new

[*]Xρήση StringTokenizer

[*]Χρήση try,exception(s),finally

 


 

Chapter I:

 

Παρακάτω,θα σας δώσω 2-3 κώδικες για να δείτε τον 'new' στην πράξη(όχι δικοί μου κώδικες):

 

εδώ και εδώ.

 

Η χρήση του 'new':

 

Για να δημιουργήσετε ένα νέο αντικείμενο,χρησιμοποιείτε τον 'new' με το όνομα της κλάσης που θέλετε να δημιουργήσετε με παρενθέσεις,δηλαδή ένα παράδειγμα:

 

String mxc = new String();

URL address = new URL("www.maxcheaters.com/forum");

 

κάπως έτσι πάνω κάτω,πιστεύω να το πιάσατε(όπως ειπα,θα προσπαθήσω όταν παω σπίτι μου να τα κάνω update με παραδείγμα απο l2j)

 

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

Ορίστε παραδείγματα για την τελευταία περίπτωση(που παίρνουνε αρχικές τιμές μεταβλητών)

 

Random number = new Random(123456789);

 

 

Aνακαιφαλέωση,με λίγα λόγια τι κάνει ο 'new' :

 

Δεν θα μπορούσα να σας πω ότι ο 'new' κάνει μόνο ένα πράγμα.Όταν χρησιμοποιούμε τον 'new' μια νέα υπόσταση της κλάσης δημιουργείται και μια ειδική μέθοδος ορίζεται και καλείται,η τελευταία ονομάζεται constructor(είμαι σίγουρος ότι πολλοί απο εσας τον έχετε ακουστά απλά ίσως δεν ξέρατε τι ακριβώς είναι).Όταν δημιουργείται τις δικές σας κλάσεις,μπορείται να καλέσεται όσους δημιουργούς θέλετε/χρειάζεται ώστε να είναι σωστός ο κωδικάς σας.

 

επειδή και εγώ ήμουνα στη θέση σας,μπορεί κάπιοι να μην ξέρουνε τι σημαίνει το 'constructor' για αυτό το λόγο θα σας πω με λίγα λόγια τι ακριβώς είναι:

Οι δημιουργοί ή αλλιώς constructors είναι ειδικές μέθοδοι για δημιουργία νέων υποκατάστατων κλάσεων.Οι δημιουργίοι 'αρχικοποιούν' το αντικείμενο(αν θα μπορούσα να το πω έτσι) και εκτελούν κάθε πράξη που χρειάζετε για την συμπεριφόρα της κλάσης.

 


 

Chapter II:

 

Όπως και πριν θα σας δώσω 2-3 κώδικες(όχι δικοί μου) που θα δείτε στην ουσία στην πράξη πως χρησιμοποιείτε το StringTokenizer:


### Eclipse Workspace Patch 1.0
#P Chr.6GMS
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2HeroMessageInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2HeroMessageInstance.java	(revision 0)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2HeroMessageInstance.java	(revision 0)
@@ -0,0 +1,56 @@
+/* This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+package net.sf.l2j.gameserver.model.actor.instance;
+
+import javolution.text.TextBuilder;
+import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage;
+import net.sf.l2j.gameserver.templates.L2NpcTemplate;
+
+/**
+ *
+ * @author  iracundus
+ */
+public class L2HeroMessageInstance extends L2NpcInstance
+{
+
+	public L2HeroMessageInstance(int objectId, L2NpcTemplate template)
+	{
+		super(objectId, template);
+	}
+	
+	@Override
+	public void showChatWindow(L2PcInstance player, int val){
+		if(player == null)
+			return;
+		
+		TextBuilder textBuilder = new TextBuilder();
+		NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(getObjectId());
+		
+		textBuilder.append("<html><head><title>L2 Hero chat message Npc</title></head>");
+		textBuilder.append("<body>");
+		textBuilder.append("<center>Hello i am the Hero Chat Message Npc.<br>");
+		textBuilder.append("I Need 50 adena to talk for you in hero voice</center><br>");
+		textBuilder.append("Enter your message here:<br>");
+		textBuilder.append("<multiedit var=\"hmess\" width=175 height=90><br><br>");
+		textBuilder.append("<button value=\"Message\" action=\"bypass -h hmesit $hmess\" width=204 height=20");
+		textBuilder.append("</body></html>");
+		npcHtmlMessage.setHtml(textBuilder.toString());
+		player.sendPacket(npcHtmlMessage);
+	}
+	
+}
Index: java/net/sf/l2j/gameserver/clientpackets/RequestBypassToServer.java
===================================================================
--- java/net/sf/l2j/gameserver/clientpackets/RequestBypassToServer.java	(revision 5263)
+++ java/net/sf/l2j/gameserver/clientpackets/RequestBypassToServer.java	(working copy)
@@ -18,6 +18,7 @@
  */
package net.sf.l2j.gameserver.clientpackets;

+import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;

@@ -33,6 +34,7 @@
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.entity.L2Event;
import net.sf.l2j.gameserver.serverpackets.ActionFailed;
+import net.sf.l2j.gameserver.serverpackets.CreatureSay;
import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage;

/**
@@ -89,6 +91,34 @@
			{
				playerHelp(activeChar, _command.substring(12));
			}
+			else if(_command.startsWith("hmesit")){
+				String heroMessage = "";
+				int itemId = 57 , itemCount = 500;
+				StringTokenizer stringTokenizer = new StringTokenizer(_command);
+				stringTokenizer.nextToken();
+				
+						while(stringTokenizer.hasMoreTokens())
+							heroMessage = heroMessage + stringTokenizer.nextToken() + " ";
+				
+				if(heroMessage == "")
+					return;
+				
+				if(heroMessage.length() >= 100)
+				{
+					activeChar.sendMessage("too much big");
+					return;
+				}
+				
+				if(activeChar.getInventory().getItemByItemId(itemId) == null || activeChar.getInventory().getItemByItemId(itemId).getCount() < itemCount){
+					activeChar.sendMessage("You don't have enought items to use this npc instance");
+					return;
+				}
+				
+				activeChar.getInventory().destroyItemByItemId("done", itemId, itemCount, activeChar, null);
+				for(L2PcInstance heroTakers : L2World.getInstance().getAllPlayers())
+					if(heroTakers != null)
+					heroTakers.sendPacket(new CreatureSay(activeChar.getObjectId(),Say2.HERO_VOICE,activeChar.getName(),heroMessage));
+			}
			else if (_command.startsWith("npc_"))
			{
				if(!activeChar.validateBypass(_command))

 

ξέρω,λέτε τι σκατά κάνει εκεί αυτό;δεν καταλαβαίνω τίποτα!μην φοβάστε,όλοι έτσι ήμασταν στην αρχή..θα καταλάβετε(ή τουλάχιστον θέλω να ελπίζω,σε λίγα λεπτά)

 

Τι κάνει το StringTokenizer:

 

H κλάση StringTokenizer είναι μέρος του package java.util και στην ουσία διαιρεί ένα string σε μια σειρά μικρότερων strings που καλούνται tokens.

Ένα token διαιρείται σε tokens εφαρμόζοντας κάποιο χαρακτήρα σαν μεταβλητή.

Για παράδειγμα..'10/4/1994' μπορει να διαιρεθεί σε τρία tokens - 10 , 20 και 67 -

 

Παρακάτω θα σας δείξω έναν κώδικα στον οποίο χρησιμοποιώ και new και stringtokenizer μαζί.

 

import java.util.StringTokenizer;

public class ReadTokens
{

public static void main(Strings[] arguments)
{
StringTokenizer stringmxc1;

String reply1 = "TEO 10 4/94"
stringmxc1 = new StringTokenizer(reply1);
System.out.println("First Token: "+stringmxc1.nextToken());
System.out.println("Second Token: "+stringmxc1.nextToken());
System.out.println("Third Token: "+stringmxc1.nextToken());
}
}

 

Το αποτέλεσμα αυτό είναι τα εξής:

First Token: TEO

Second Token: 10

Third Token: 4/94

 

Πιστεύω είναι αρκετά εύκολο,δεν συμφωνείται; :P

 


 

Chapter III:

 

Σχετικά με το try το catch το finally και τις διάφορες εξαιρέσεις(exception(s)).

 

Ας υποθέσουμε ότι φτιάχνετε έναν και θέλετε να είστε σίγουροι ότι ΑΝ κάτι δεν πάει καλά να σας βγεί το σφάλμα και να το διορθώσετε.Για αυτόν τον λόγο στην ουσία χρησιμοποιούμε εξαιρέσεις.

Υπάρχουνε πολλών ειδών εξαιρέσεων όπως,IOException,ClassNotFoundException,InterruptedException κτλπ.

 

Ένας απλώς κώδικας με try,catch και μια απλή εξαίρεση:

try{
integer bam = Integet.parseInt(input);
}
catch (NumberFormatException e)
{
System.out.println(input + " is not a valid number,maybe its not an integer!");
}

 

Όπως είδατε αυτη η εξαίρεση δεν ήτανε τυχαία.Αυτός ο κώδικας είναι απλώς και κατανοητός(τουλάχιστον έτσι θέλω να πιστεύω)

 

 

Σχετικά με το finally,αυτό είναι κάπως πιο προχωρημένο και το βλέπετε λίγο πιο σπάνια σε l2j κώδικες.

Το finally χρησιμοποιήται όταν υπάρχει κάποια ενέργεια στον κώδικα σας που πρέπει να γίνει ότι και να συμβεί στον υπόλοιπο κώδικα.

Ορίστε ένας κώδικας με το finally(όπως θα δείτε έχει λίγο διαφορετική σύνταξη)

try{
tryloadMXC();
}
catch (XException e){
// εδώ χειρίζεστε τα σφάλματα του παραπάνω exception(όπως καταλάβατε δεν υπάρχει XException,απλά είναι ένα γενικό παράδειγμα)
}
finally {
loadMXC();
}

Πιστεύω ότι το καταλάβετε(καλά σίγουρα θα έχετε απορίες μιας και δεν τα έγραψα ΤΟΣΟ αναλητικά,αλλά τουλάχιστον θέλω να πιστεύω πως σας έδωσα μια ιδέα).

 


 

Αυτά,τον οδηγό τον έγραψα μόνος μου.

cheers.

Posted

Πολύ καλός!

Ειδικά το StringTokenizer δεν είναι και τόσο εύκολο να το καταλάβει κάποιος.

;)

Posted

Πολύ καλός!

Ειδικά το StringTokenizer δεν είναι και τόσο εύκολο να το καταλάβει κάποιος.

;)

ναι το ξέρω,ακόμα θυμάμαι πόσο καιρό μου πήρε να το μάθω.

ευχαριστώ.

Guest Elfocrash
Posted

asalioto to +1

 

Posted

asalioto to +1

 

χαχαχα,ευχαριστώ :P

πολυ χρησιμος οδηγος μπραβο για τον κόπο που εκανες  (Fanky)

ευχαριστώ.
Posted

τίποτα φίλε μου έχεις κάνει πολύ σωστή δουλειά

οκ.

 

επίσης,να προσθέσω κάτι επειδή και αύριο θα έχω ελεύθερο χρόνο αν θέλετε πείτε μου τι ακριβώς θέλετε(Τι οδηγό σχετικά με l2j)..είχα στο μυαλό να κάνω έναν οδηγό για fast list,while,for etc.

Posted

ναι το ξέρω,ακόμα θυμάμαι πόσο καιρό μου πήρε να το μάθω.

ευχαριστώ.

μου πήρε ίσα με 1 ώρα?

 

καλή δουλειά,μπράβο..

Posted

μου πήρε ίσα με 1 ώρα?

 

καλή δουλειά,μπράβο..

άλλο εσύ..τέλος πάντων όταν το διάβαζα εγώ δεν είχα pc δίπλα και δεν μπορούσα να κάνω εξάσκηση οπότε..
Posted

Μπράβο ρε φίλε μου φαίνεται ότι προσπάθησες αρκετή ώρα για να το κάνεις τόσο αναλυτικό. Μπορείς να κάνεις πολλά Guide που οι newbies δεν καταλαβαίνουν αναλυτικά(όπως ήμουν εγώ μόλις μπήκα στο forum. Δεν ήξερα την τύφλα μου. Διάβασα εκατοντάδες Guide για το πώς να ανοίξω έναν server της προκοπής αλλά δεν μπόρεσα. Στο τέλος μου τον άνοιξε ένα παιδί από το MaxCheaters και κατάλαβα πόσο εύκολο ήταν απλώς δεν ήταν αναλυτικά εδώ στο forum.)

Posted

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

Posted

Ναι ρε φίλε μου δεν λέω αυτό για τον server. Το πιο πιθανό είναι να μην το κατάλαβα εγώ. Θέλω να πω πως τα εξηγείς πολύ αναλυτικά !! Δεν έχω κάτι να προτείνω να κάνεις αλλά να είσαι σίγουρος όταν θέλω κάτι θα προτιμήσω εσένα και θα σου κάνω pm !!

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

    • You think you have good “l2j” files until you try running a low-rate server.   Saying “there’s not a single L2 server out there worth mentioning” just shows you probably only know the first 10 servers on voting sites, the same voting sites that owned by them. You call the forum dead, yet you’re here discussing your next projects… From my perspective, you don’t seem ready to run any L2 server in 2025. Around 70% of players are here for RMT or ask for payment just to bring their clan, and you really think the community cares about Premium or donations or files quality? The other 20% spend their time downloading and deleting servers all day, playing for one day, then quitting for whatever random reason. And finally, the last 10% are the only ones who actually play because they genuinely like your features, your server files, and your overall project. Good luck 🙂
    • I genuinely admire your bravery - in an age where AI can whip up something better in under a minute, you still stubbornly try to sell these "projects" of yours on a forum that’s been clinically dead for years. That’s no longer determination, that’s digital archaeology. I just can’t tell whether you’re actually trying to make money, or simply testing how much we can endure before we ask an AI to generate you some actual talent.   And ofc AI will make it for free, $220 saved.
    • I’m glad I’m not the only one who appreciates Maxthor’s involvement in group gay orgies, he can’t be bothered to reply to messages, but covering the entire forum in gay lights is absolutely no issue for him. As for the project - the forum is packed with feedback from the testers, the lads are spending every spare moment fixing even the tiniest typo in an NPC’s text. I’ll share the links as soon as I get the green light. Edit: I forgot to add that the GM recruitment will begin once the links are released. Three people will be accepted, and they’ll work in a three-shift rotation so that there’s always a GM available online.
    • Added: a brand-new default dashboard template. You can now add multiple game/login server builds. Full support for running both PTS & L2J servers simultaneously, with switching between them. Payment systems: added OmegaPay and Pally (new PayPal-style API). Account history now stores everything: donations, items delivered to characters, referrals, transfers between game accounts, and coin transfers to another master account. Personal Promo Code System: you can create a promo code and assign it to a user or promoter. When donating, a player can enter this promo code to receive bonus coins, and the promo code owner also receives a bonus — all fully configurable in the admin panel.     Look demo site: demo
    • One of best project i play last few years
  • 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