Jump to content

Recommended Posts

Posted

Επειδή έχω δει πολλούς στο req dev help gr/eng l2j να κολλάνε σε πρακτικά απλούς κώδικες,και αυτό είναι λογικό μιας και δεν έχετε την απαραίτητη εμπειρία,αποφάσισα να κάνω αυτόν εδώ τον οδηγό ώστε να προσπαθήσω να σας βοηθήσω για να ξεπέρασετε αυτό το πρόβλημα.

Ότι patch/code δείτε θα είναι coded πάνω σε clean l2j interlude(www.l2jserver.com),όχι πως έχει καμία διαφορά,απλά το διευκρινίζω για να μην υπάρχουν χαζές ερωτήσεις :P

Λοιπόν,έχουμε και λέμε.

 

Πριν λίγο καιρό,είχα ένα request(σε πμ) όταν ο παίκτης παίρνει το ίτεμ του noblesse(που το είχε custom στο σέρβερ του) να κάνει pop-up ένα html που να του δίνει οδηγίες για το τι να κάνει(ΠΡΟΣΟΧΗ:δεν είναι quest,για παράδειγμα μπορεί να του λέει ότι πρέπει να πάρει 100 pvp και 10pk για να γίνει noblesse,ή κάτι τέτοιο..η περίπτωση quest είναι άλλη και λίγο πιο περίπλοκη κατάσταση).

Ας αρχίσουμε με αυτόν τον κώδικα:

Όταν ένας παίκτης πατάει ένα συγκεκριμένο item(το id θα το βάλετε εσείς) να εμφανίζετε ένα html(pop-up) οπού θα του δίνει πληροφορίες για το πως να γίνει noble(εκεί μέσα,μπορείτε να βάλετε ότι πληροφορία θέλετε εσείς,πχ πληροφορίες για τον σέρβερ ή κατι τέτοιο).Για να μην σας τα πολυλογό θα κάνω ένα κώδικα,που όταν πατάς ένα συγκεκρίμενο item(id) θα σου εμφανίζετε ένα html με χ,y,z πληροφορίες.

 

Αφού θέλουμε καινούργιο αντικείμενο,που πάμε;

 

σωστά,net.sf.l2j.handler.itemhandlers και κάνουμε ένα καινούργιο αρχείο με όνομα PopUpHtml(ότι όνομα θέλετε βάζετε εσείς)

2e1hpy0.png

(βάζω φωτογραφίες ώστε να μην έχετε απορίες για αυτά τα πράγματα :P)

 

Συνεχίζουμε,αφού κάνατε το αρχείο θα είναι έτσι

width=1024 height=576http://i49.tinypic.com/2r3z8g0.png[/img]

 

όπως θα δείτε και σε κάθε άλλο αντικείμενο,πρέπει να χρησιμοποιήσουμε το implements δίπλα απο την κλάση μας(για αρχή,αυτό να είναι το στάνταρ σας(όταν κάνετε ένα νεο αντικείμενο,πρέπει να χρησιμοποιήτε implements IItemHandler,δεν μπορώ να σας εξηγήσω atm ποια είναι η χρήση του,το ίδιο και για το extends).

Ώστε θα γίνει κάπως έτσι

width=1024 height=576http://i48.tinypic.com/2m6v12q.png[/img]

Μην ανυσηχείτε για το error που βγήκε,πηγαίντε πάνω στο error και πατήστε το πρώτο,όπως στην φωτογραφία

width=1024 height=576http://i48.tinypic.com/263a2gw.png[/img]

 

Για να μην αναρωτιέστε,όταν κάνουμε implements (το extends είναι αρκετά διαφορετικό) σε μία κλάση υπάρχουν και 'συνέπειες' :P,πρέπει να χρησιμοποιήσουμε της μεθόδους της κλάσης που κάναμε implements.Τέλος πάντων,όπως είπα και πριν αυτά τώρα σας τα λέω γενικά,δεν είναι ο σκοπός του τοπικ να σας μάθω το implements & extends.Συνεχίζουμε,όταν πάτησετε το πρώτο θα γίνει κάπως έτσι:

width=1024 height=576http://i46.tinypic.com/2vs58n5.png[/img]

Τα πράσινα γράμματα,σβήστετα(και το return null;)δεν χρειάζονται είναι απλά πληροφορίες που σας είναι άχρηστες(τώρα:P).

 

Ωραία λοιπόν,ξεκινάμε τον κώδικα.(Ναι ξέρω,θα σας έβγαλε ότι είναι λάθος το getItemIds() αλλά μην ψαρώσετε :P)

 

Πρώτα από όλα,δηλώνουμε το Id του item.Κάντε το όπως στην φωτογραφία:

width=1024 height=576http://i50.tinypic.com/2mk2h0.png[/img]

Για αυτούς που αναρωτιούνται γιατί σβήσαμε το return null; και βάλαμε αυτό,θα το καταλάβαιτε στην πορία(ελπίζω).

Επίσης για αυτούς που αναρωτιούνται γιατί έβαλα πινακες(αυτά εδώ [] στην java λέγονται πίνακες,και γενικα είναι πιο εύχριστοι,θα κάνω έναν οδηγό σήμερα σχετικά με τους πίνακες :P).

Επίσης,το ID του αντικείμενου μας,είναι εντελώς τυχαίο,βάλτε ότι σας καπνίσει εκεί.

 

Συνεχίζουμε,

	public void useItem(L2PlayableInstance playable, L2ItemInstance item)
{


}

εδώ μέσα θα περιέχεται όλος μας ο κώδικας(ο main),οπότε ας ξεκινήσουμε να τον γεμίζουμε :P

(απο εδώ και πέρα σταματάω τις φωτογραφίες,για να εξηγώ καλύτερα).

 

Πρώτα,ξεκινάμε με το στάνταρ check,που είναι σε όλα και για ΟΛΑ τα itemhandlers,

if (!(playable instanceof L2PcInstance))
         return;
      L2PcInstance activeChar = (L2PcInstance)playable

 

στην συνέχεια 'θέτουμε' το id του ιτεμ μας,

 int itemId = item.getItemId();

 

Μετά,συνεχίζουμε:

if (itemId == 1)

Εδώ λέμε,πως εαν πατήσουμε ένα item που έχει id 1 τότε να:

{
String htmFile = "data/html/.../PopUpItem.htm";
	String htmContent = HtmCache.getInstance().getHtm(htmFile);

		NpcHtmlMessage infoHtml = new NpcHtmlMessage(1);
		infoHtml.setHtml(htmContent);
		activeChar.sendPacket(infoHtml);
}

Εδώ αν το δείτε καλα,παίζει συνέχεια με τα objects.Εδώ θα σας βγάλει κάμποσα errors,αλλά μην ψαρώσετε είναι λόγο των imports,πατήστε πάνω στο error και κάντε Imports την κλάση που σας ζητάει,και θα είναι οκ.Αυτές οι 5 γραμμές παραπάνω είναι stadar για pop up html,οπότε δεν θέλετε παραπάνω εξηγήσεις εδώ.(Για αυτούς που ενδιαφέρονται να μάθουν γιατί είναι έτσι,πηγαίντε στις κλάσεις που κάνατε imports προηγουμένος,και θα το καταλάβετε :P).Ας εξηγήσω την μόνη γραμμή που σας είναι πραγματικά χρήσιμη σε αυτόν τον κώδικα,και είναι η εξής:

 

String htmFile = "data/html/.../PopUpItem.htm";

Εκεί είναι που θα είναι το htm σας,το βάζετε όπου θέλετε εσείς,δεν έχει σημασία(καλό είναι να το βάλετε εκεί που είναι και το welcome,δηλαδή data/html(εάν θυμάμαι καλά)).

 

Μετά φτιάχνετε το htm και το βάζετε εκεί που θέλετε εσείς(απλά μετά να είστε σίγουροι ότι θα είναι σωστή η απο πάνω γραμμή).

 

Τέλος,ο κώδικας(core side,εξηγώ απο κάτω για dp) θα είναι έτσι:

width=1024 height=576http://i47.tinypic.com/amfn7a.png[/img]

 

Σημείωση: Δεν έχω καν dp(όπως θα είδατε) και επειδή θα μου πάρει χρόνο δεν θα την κατεβάσω(αυτοί που δεν ξέρετε να κάνετε δείτε πως είναι το welcome και κάντε το c/p(απλά αλλάξτε τις πληροφορίες που έχει μέσα).

 


 

Τώρα πάμε να κάνουμε ένα άλλου τύπο κώδικα :

Όταν ένας παίκτης μπαίνει μέσα στο game,εάν έχει πάνω απο 100 pvp & 100pk & είναι noble & είναι και hero,να κάνει ένα announcement o σέρβερ.

(έβαλα πολλά & ώστε να δείτε πως θα το χρησιμοποιούμε).

 

Αφού μας λέει 'όταν ένας παίκτης μπαίνει μέσα στο game' ο κόσμος να γυρίσει ανάποδα,εμεις πάμε στο enterworld.java.

To enterworld.java είναι υπευθυνο για το τι θα κάνει ο παίκτης όταν μπει μέσα στο παιχνίδι.

Αρκετά με το μπλα μπλά,πάμε να τα δούμε στην πράξη:

 

ξεκινάμε,ο κώδικας αυτός είναι αρκετά απλός

πάμε όπου θέλουμε στο enterworld.java(μην πάτε και μου το βάλετε κάτω απο καμια μέθοδο :P),βάλτε π.χ εδώ

 Announcements.getInstance().showAnnouncements(activeChar);

(Ναι καλά καταλάβατε εδώ κάνει load τα announcements,αν το σβήσετε αυτό δεν θα φαίνονται τα announcements σε κανέναν :P)

Λοιπόν πάμε απο κάτω,και αρχίζουμε:

if (activeChar.getPvpKills() > 100 & activeChar.getPkKills() > 100 & activeChar.isNoble() & activeChar.isHero())
{
Announcements.getInstance().announceToAll("Server's legend "+activeChar.getName()+" with 100 pvp & 100pk & noble & hero stus is currently online");
  }

και ναι,αυτό ήτανε!δύσκολο;

Ο κώδικας απο την αρχή είναι απλός,κάνει check για το εάν όντως ισχύουν τα δεδομένα μας(ΠΡΟΣΟΧΗ:Εαν έστω και ένα δεν ισχύει,ο κώδικας δεν θα λειτουργήσει.

 

Και για να σας δώσω ένα παράδειγμα για την προηγούμενη πρόταση μου,θα σας κάνω τον ίδιο κώδικα ώστε να δείτε πως ο παραπάνω κώδικας θα δουλέψει εαν ισχύει μόνο ένα(ή περισσότερα).

 

if (activeChar.getPvpKills() > 100 || activeChar.getPkKills() > 100 || activeChar.isNoble() || activeChar.isHero())
{
Announcements.getInstance().announceToAll("Server's legend "+activeChar.getName()+" with 100 pvp & 100pk & noble & hero stus is currently online");
  }

 

νταν νταν,αυτό ήτανε.Όπως καταλάβατε το || σημαίνει ή,και το & σημαίνει και.

 


 

Πάμε τώρα και για έναν τελευταίο κώδικα,(UnSponsored για εσένα αυτό το κομμάτι(κυρίως) :P)

 

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

Όπως είπα,αφού λέει 'μπαίνει στο παιχνίδι' ο κόσμος να γυρίσει ανάποδα πάμε στο enterworld.java

 

ξεκινάμε.

Πηγαίντε κάτω απο τον προηγούμενο κώδικα και βάλτε,αυτα:

 activeChar.sendMessage("Welcome : "+activeChar.getName());
        activeChar.sendMessage("Your class: "+activeChar.getClassId());
        activeChar.sendMessage("PvP Kills: " + activeChar.getPvpKills());
activeChar.sendMessage("PK Kills: " + activeChar.getPkKills());
activeChar.sendMessage("PvP Flags: " + activeChar.getPvpFlag());
        activeChar.sendMessage("HP, CP, MP: " + activeChar.getMaxHp() + ", " + activeChar.getMaxCp() + ", " + activeChar.getMaxMp());
 activeChar.sendMessage("Level: " + activeChar.getLevel());
 activeChar.sendMessage("There are: "+L2World.getInstance().getAllPlayers().size()+" players online");
   

Ντάξ,εδώ πιστεύω δεν θέλετε και πολλές εξηγήσεις,αλλά για κάθε περίπτωση,ας εξηγήσω τι κάνει το καθένα.

Το πρώτο του λέει το 'welcome name',το δεύτερο του λέει τι class είναι,το τρίτο πόσα pvp έχει,το τέταρτο πόσα pk,το πέμπτο πόσα pvp & pk έχει,το έκτο πόσο hp,mp,cp έχει,το έβδομο πόσα lvl είναι και το τελευταίο πόσα άτομα υπάρχουν μέσα στον σέρβερ όταν κάνει αυτός log in.

 

Ξέρω,αυτά ίσως σας φαίνονται γελοία,αλλά οκ..όπως είπα είναι για αρκετά καινούργιους.

 


 

Τελείωσα με τον οδηγό,πιστεύω να καταλάβατε 2-3 πράγματα παραπάνω.

 

Κάποιες συμβουλές,αν είστε καινούργιοι μην πάτε αμέσως σε μεγάλα πράγματα.Ξεκινήστε με voicedcommands,απλά πράγματα για αρχή(p.x όταν πατάς .noble να σε κάνει noblesse) μετά κάντε απλά και μικρά πραγματάκια στο enterworld.java(όπως είναι ο τρίτος κώδικας(και ο δεύτερος)),μετά πηγαίνετε στα itemhandlers,και μετά (αφου τα κάνετε αυτά ξανά και ξανά μέχρι να είστε σίγουροι ότι τα μάθετε(ή τουλάχιστον τα καταλάβατε αρκετά)) ξεκινήστε να κάνετε μικρά features στο pcinstance.

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

Το pcinstance περιέχει ένα 75-80% όλων των μεθόδων που χρησιμοποιούμε στους περισσότερους κώδικες,καθίστε και διαβάστε τις,ώστε να τις μάθετε κάποια στιγμή :P(πρέπει να μάθετε τουλάχιστον τις βασικές/αυτές που βρίσκεις μέχρι και σε κώδικες 3-4 γραμμών).

 

Τέλος,να θυμάστε πάντα ότι όλοι αρχίζουμε απο το 0 και λίγοι φτάνουμε κάπου,εσείς που θα φτάσετε(στο χέρι σας είναι)?!

Posted

Fanky den exw logia na to perigrapsw...apla telio...Thnx!Aposti8ish le3i pros le3i OLO!

Edit 2 sumboules: 1:Dior8ose to name mou...:P UnSponsored me lene

                          2: ston proto code molis ton telioneis,mporeis na ton anevaseis na doume pws einai olokliromenos?:D

Kai pali Thnx..:D

Edit 2:

both done >.>

:D
Posted

Fanky den exw logia na to perigrapsw...apla telio...Thnx!Aposti8ish le3i pros le3i OLO!

Edit 2 sumboules: 1:Dior8ose to name mou...:P UnSponsored me lene

                          2: ston proto code molis ton telioneis,mporeis na ton anevaseis na doume pws einai olokliromenos?:D

Kai pali Thnx..:D

both done >.>
Posted

Πολυ Ωραιο Fanky  συνεχισε την καλη δουλεια. θα βοηθήσεις πολλα παιδια που θελουν να ασχοληθουν !!!

 

Σου αξιζει +1 , Κριμα που δεν γινεται να σου δωσω αλλα σιγουρα καποιος θα το κανει :)

 

Ποιο eclipse  χρησιμοποιείς?? galileo/

 

 

Posted

Poli kalo. Mpravo file

ευχαριστώ..

Πολυ Ωραιο Fanky  συνεχισε την καλη δουλεια. θα βοηθήσεις πολλα παιδια που θελουν να ασχοληθουν !!!

Ευχαριστώ.

Ποιο eclipse  χρησιμοποιείς?? galileo/

Ναι,αν και λίγη σημασία έχει :P
Posted

Πολυ Ωραιο Fanky  συνεχισε την καλη δουλεια. θα βοηθήσεις πολλα παιδια που θελουν να ασχοληθουν !!!

 

Σου αξιζει +1 , Κριμα που δεν γινεται να σου δωσω αλλα σιγουρα καποιος θα το κανει :)

 

Ποιο eclipse  χρησιμοποιείς?? galileo/

 

 

kalo einai na katevaseis to Eclipse Classic 4.2midietera an 8es na asxoli8eis me aCis

Edw gia Win x32

kai edw gia win x64

Guest Elfocrash
Posted

+1. mpravo.

oso gia ta famous last words einai para polu swsta kai auto to lew se osous theloun an mathoun.

Mila me grifous geronta.

Posted

+1. mpravo.

mercy.

Mila me grifous geronta.

:ohstopityou:

oso gia ta famous last words einai para polu swsta kai auto to lew se osous theloun an mathoun.

^^
Posted

Δεν θα γράψω ούτε ότι είναι τέλειος οδηγός, ούτε κάτι που είναι απλές λέξεις.

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

Ευχαριστώ γι'αυτόν τον οδηγό.

 

+1 λοιπόν.

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