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

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...