Jump to content

UnixCode

Members
  • Posts

    322
  • Credits

  • Joined

  • Last visited

  • Feedback

    0%

Everything posted by UnixCode

  1. ? you are wrong , check the video 1st example i write 2 words . ....
  2. thanks , and as i said this is the very basic idea , everyone can extend it.
  3. Yes, but who knows that tricks with telnet :D jiajia
  4. Created: Today. Credits: Me You have a server with donates and you need to be informed about donates because you can't be many hours online?Here we are. Player talks to NPC and he writes Pin Number , am0unt of Money and a comment(like what he wants , etc). Player can't spamm this because gm must see it first.Files are saved in data/donates(create file donates) and each file has player's name.You can extend it,its the very basic idea now. http://pastebin.com/5YUfFgU4 Video: Sorry for video analysis , i will upload new video soon.Have fun
  5. file mou prepei na to kitakseis auto .. ok? www.l2versus.eu to domain litourgei akoma. egw ftew pou ipa ti gnomi mou, an oi aloi den kseroun na kanoun vasikes rithmisis stin arxi otan agorazoun to dedicate de ftew egw ok? an exeis provlimata sto spiti den se ftaine oi aloi, peace
  6. den se katalavenw pragmatika, nai eixa server prin ligo kero. kai nai imoun euxaristimenos, ti provlima exeis den katalavenw? pragmatika oti na nai
  7. +1 opos ipa den ixa kanena provlima , emina apolita euxaristimenos.
  8. Mhn pliroforite oti 8elete exete parei pc? Sigekrimena exw parei ligo paleotera ena mixanima apo ekei de thimame pio paketo kai emina poli euxaristimenos. Eidika se timh kai eksipiretish , kai kanena apolitos provlima me to dedicate. Den kserw gia esas.
  9. and the from doesn't need at all , if you want , you don't add it. The code is correct , it returns true value but email isn't sent
  10. i have looked many tutorials , it doesn't need password or smth like that :/
  11. use the getAppearance().setInvisible(boolean x); method of L2PcInstance class
  12. <?php $to = "ponyriderr@gmail.com"; $subject = "Test mail"; $message = "Hello! This is a simple email message."; $from = "healingparam@gmail.com"; $headers = "From:" . $from; mail($to,$subject,$message,$headers) or die('problem'); ?> Why this doesn't work What's the problem? WTF PS: it returns true(mail method)
  13. Απο τη στιγμη που κανεις edit στο core δηλαδη οταν αφου προσθεσεις ενα java code extra, κανεις build(ναι) ξανα το core σου, διαλεγεις το l2jserver.jar αρχειο (εκτος αν εχεις κανει edit και τιποτα αλλο οπως configs) και το κανεις αντικατασταση με το παλιο. Μετα shutdown τον σερβερ η restart και εισαι ετοιμος
  14. nullpointer exception search the lines it gives you , somewhere there you must check for null . if(object != null) {}
  15. i think he needs the script for all the characters ( and online and offline ) . But if he wants for online players only , he doesn't need sql connection, right?
  16. ευκολα γινεται με ενα for ή while loop. καντο με while καλυτερα , δημιουργησε μια μεταβλητη int που θα ειναι οι ευκαιριες. μεσα στο while οποτε χρειαζεται θα αυξανεται κατα μια , φυσικα δε θα γινεται να χρησιμοποιησουν αλλες λειτουργιες αν δεν εχουν αλλη ευκαιρια. while(eukeries < 3) { //blabla }
  17. Το πρωτο 100? τι λετε? χωραει περισσοτερα ... ανετα..
  18. cool bro , good luck! when you can, add a video for other ppl il will be good :)
  19. alithia ine, alla ine tragiko na grafeis elate sto blog kai vlakies gia ena toso sovaro thema , ekanes to topic mono kai mono gia diafimisi , ntroph apla..
  20. Γεια σε όλους είχα κάνει παρόμοιο τόπικ πριν πολύ καιρό αλλά μιας και τώρα καταλαβαίνω τα πράγματα 1000 φορές καλύτερα είπα να ξανακάνω, άλλωστε αυτό θα περιέχει πιο πολλά πράγματα. Σήμερα θα μιλήσουμε συγκεκριμένα για το πώς μπορούμε να κάνουμε συνδέσεις στην database μέσω Java στο L2J και πώς μπορούμε να εκτελούμε εντολές και όλα τα σχετικά Πότε και πού χρησιμοποιούμε SQL connections, σε τι είναι χρήσιμες? Σίγουρα κάποιος πρώτη φορά θα το αναρωτηθεί. Λοιπόν καταρχάς συνδέσεις με database θα χρειαστόυμε σε περιπτώσεις που θέλουμε να πάρουμε στοιχεία απο την database (λογικό) από οποιοδήποτε table,column θέλουμε εμείς και σε περιπτώσεις που θέλουμε κάτι να περάσουμε μέσα στην database μας. Το καλό πράγμα σε όλη την ιστορία που χωρίς αυτό δεν θα είχε και νόημα,είναι ότι στην database τα πράγματα μας μένουν και μετά το restart του server μας , μένουν για πάντα αν το θελήσουμε! (ανάλογα βέβαια) Χαρακτηριστικά Παραδείγματα : donate system , nobless , pvp kills. Και τα 3 παρατηρείτε ότι δεν διαλύονται με το rr του server , ένας donator είναι και μετά το rr donator, ένας nobless είναι Nobless και μετά το rr και ένας παίκτης μετά το rr του server έχει όσα pvp είχε πριν, δεν μηδενίζονται. Πολλά λόγια , πάμε στο ψητό , ας αρχίσουμε Θα προσπαθήσω να το εξηγήσω όσο καλύτερα μπορώ. Καταρχάς κάνουμε Import για αρχή τα εξής import java.sql.Connection; import java.sql.PreparedStatement; import net.sf.l2j.L2DatabaseFactory; Όπως βλέπετε έχουμε κάνει Import την κλαση Connection και την κλάση PreparedStatement . κλάση Connection: με αυτή θα δημιουργήσουμε την σύνδεση μας για να μπούμε στην database του server, το λέει και η λέξη , έτσι δεν είναι?(Connection=σύνδεση) κλάση PreparedStatement: στην SQL εκτελόυμε συνέχεια statements ( προτάσεις - εντολές ). π.χ ΚΑΝΕ ΟΛΟΥΣ ΤΟΥΣ ΠΕΚΤΕΣ ΝΟΒΛΕΣΣ Αυτή είναι μια πρόταση που εκτελείται , βέβαια όχι έτσι αλλά στην SQL για να το κάνουμε αυτό γράφουμε UPDATE characters SET nobless=1 WHERE accesslevel=0 πχ έτσι κάνουμε nobl τους παίκτες που δεν ειναι GM Άρα αυτή η κλάση μας βοηθάει σε αυτό , να δημιουργήσουμε προτάσεις σε SQL μέσω Java. Αφού πλέον γνωρίζουμε σε τι θα μας χρειαστούν αυτές οι 2 κλάσεις πάμε να τις χρησιμοποιήσουμε. Καταρχάς δημιουργούμε ένα αντικείμενο για την καθεμία κλάση βάζοντας το τιμή null προς το παρόν δηλαδή άδεια τιμή , δεν θα περιέχει τίποτα. Connection connection = null; PreparedStatement state = null; Τώρα καταλαβαίνετε και οι ίδιοι σας ότι η σύνδεση είναι δυνατόν να μην πετύχει 100% ειδικά αν έχει και προτάσεις μέσα λόγω λαθών στην σύνταξη του SQL ή ακόμα λόγω της μη-ύπαρξης της database άρα θα χρειαστούμε να περυκυκλώσουμε τον κώδικα μας με try/catch. Τα προσθέτουμε λοιπόν try { } catch(Exception e) { e.printStackTrace(); } μέσα στα blocks του try θα είναι ο κύριος code. στο catch βλέπουμε πως βάλαμε την μέθοδο e.printStackTrace(); η οποία είναι καλή να την βάζετε γιατί αν εμφανιστεί οποιοδήποτε error θα σας το εμφανίζει στο GS και θα είναι πιο εύκολο να το fix. Πάμε λοιπόν να δώσουμε ζωή στα αντικείμενα που δημιουργήσαμε νωρίτερα και μη ξεχάσαμε απο δω και πέρα ότι κάνουμε είναι μέσα στο try . Καταρχάς λέμε πως το αντικείμενο connection θα είναι μια σύνδεση η οποία συνδέεται με την database που τρέχει ο server, για να το κάνουμε αυτό γράφουμε connection = L2DatabaseFactory.getInstance().getConnection(); Αυτό μονάχα,πλέον έχουμε σύνδεση στην database χρησιμοποιώντας το connection.Τώρα θα μπορούσαμε να κλείσουμε τη σύνδεση κάλλιστα , αλλά κανένας ο λόγος να δημιουργήσουμε σύνδεση χωρίς ουσιαστικό λόγο. Ήρθε η ώρα να χρησιμοποιήσουμε το άλλο μας αντικείμενο, το state . Αυτό απλά είναι αυτο που είπαμε, θα το κάνουμε να παίρνει μια πρόταση την οποία θα εκτελέσουμε αργότερα στην database . Ας πούμε ότι θέλω να κανω το name σε όλους τους GM, ADMINISTRATOR. Άχρηστο φυσικά γιατί μπορούμε να το κάνουμε και χωρίς connection(και πάλι άχρηστο) στην database αλλά είναι ένα παράδειγμα για να δείτε πως δουλεύει , γράφουμε state = connection.prepareStatement("UPDATE characters SET char_name='ADMINISTRATOR' WHERE accesslevel>0"); Το update το χρησιμοποιούμε για να αλλάξουμε τιμές στην database σε υπάρχον πράγματα , εδώ αλλάξαμε το ονομα τον GMS. Έτοιμο και το state , τώρα τι μένει? να εκτελέσουμε τη πρόταση(το state δηλαδή πλέον). άρα έχουμε state.execute(); το εκτελέσαμε , αυτό ήταν. και τώρα αυτό που δεν ξεχνάμε ποτέ να κάνουμε είναι να κλείσουμε τη σήνδεση αλλά και την πρόταση αλλιώς θα έχουμε έρρορς άρα πολύ απλά γράφουμε connection.close(); state.close(); Αν βρει καποιο έρρορ παει κατευθείαν στο catch , τώρα προσθέτουμε και το εξής finally { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } Με το finally λέμε τι θα κάνει τελικά και αυτό που θέλουμε να κάνει τελικά στα σίγουρα , ειναι να κλείνει την σύνδεση , άρα έτσι εξηγείται το παραπάνω. Αυτό ήταν ολόκληρος ο κώδικας θα είναι έτσι Connection connection = null; PreparedStatement state = null; try { connection = L2DatabaseFactory.getInstance().getConnection(); state = connection.prepareStatement("UPDATE characters SET char_name='ADMINISTRATOR' WHERE accesslevel>0"); state.execute(); connection.close(); state.close(); } catch(Exception e) { e.printStackTrace(); } finally { try { connection.close(); } catch (Exception e) { e.printStackTrace(); } } Αυτό ήταν ένα καθαρό εύκολο παράδειγμα για το πως ανανεώνουμε (UPDATE) υπάρχον στοιχεία στην database μας. Τώρα πάμε να δούμε πώς θα διαβάζουμε απο την database Στο παράδειγμα θα διαβάσουμε πόσα pvp έχει ένας παίκτης με ονομα Unix για παράδειγμα. αρχίζουμε πάλι το ίδιο γράφουμε τα ίδια: Connection connection = null; PreparedStatement state = null; try { } catch(Exception e) { e.printStackTrace(); } finally { try { connection.close(); } catch (Exception e) { e.printStackTrace(); } } Και τώρα μέσα στο try πάμε για τον κύριο code, δεν εξηγώ τι κάνει το καθένα τώρα τα είπα παραπάνω. Δημιουργουμε το connection connection = L2DatabaseFactory.getInstance().getConnection(); Και τώρα το κύριο που αλλάζει είναι η πρόταση , το state . γράφουμε state = connection.prepareStatement("SELECT pvpkills FROM characters WHERE char_name='Unix'"); Έτσι διαλέγουμε ( select ) τα pvpkills απο το table characters(FROM characters) όπου ονομα ισούται με Unix(char_name='Unix') Τώρα δεν θα εκτελέσουμε τον κώδικα γιατί δεν έχει ουσία δε θα συμβεί τίποτα. Δημιουργούμε μια μεταβλητή int στην οποία θα αποθηκεύονται το πόσα pvp έχει. int pvps = 0 Τώρα για να πάρουμε το αποτέλεσμα της πρότασης (state) και να το αποθηκεύσουμε στην μεταβλητη pvps θα χρειαστεί να κάνουμε import μια νέα κλάσση με όνομα ResultSet import java.sql.ResultSet; η κλάση αυτή μας βοηθάει να πάρουμε το εκτελέσιμο αποτέλεσμα , εδώ συγκεκριμένα τα pvpkills του παίκτη Unix. Τώρα πάμε κάτω απο το αντικείμενο connection και δημιουργούμε και ένα αντικείμενο ResultSet με άδεια τιμή προς το παρόν ResultSet rset = null; Μετά πάμε εκεί που είχαμε μείνει και δίνουμε αξία στο αντικείμενο rset , γράφουμε rset = state.executeQuery(); Τώρα δώσαμε τιμή στο rset, με αυτην την εντολή λέμε στο rset να δωθεί στην ουσία το αποτέλεσμα της πρότασης (state) Ωραία , τώρα πως δίνουμε το αποτέλεσμα που είναι τα pvp kills στην μεταβλητη pvps? Γράφουμε while(rset.next()) { pvps = rset.getInt("pvpkills"); } Λιγο περίπλοκο ε?Είναι απλό . με το while(rset.next()) λέμε ουσιαστικά όσο το αντικείμενο rset ( που ειναι το αποτελεσμα ) έχει κάτι να μας δώσει, έχει ένα αποτέλεσμα (στην ουσία έχει 1 γιατί μονο απο 1 παικτη παιρνουμε τα pvps) τότε η μεταβλητη pvps να ισούται με την μεταβλητή pvpkills του rset , to pvpkills είναι αυτό που γράψαμε στην πρόταση μας. SELECT pvpkills , έτσι παίρνουμε την τιμή του. άρα τώρα αυτό ηταν, η μεταβλητή pvps δηλώνει πόσα pvps έχει ο παίκτης Unix. άρα λοιπόν τώρα κλείνουμε ότι πριν αλλά και το rset connection.close(); rset.close(); state.close(); Αυτά ήταν κάτι βασικά που πρέπει να ξέρετε, διαβάστε τα κάντε εξάσκηση και δέστε παραδείγματα απο διάφορα codes που χρησιμοποιούν συνδέσεις στην database, σίγουρα θα καταλαβαίνετε πολλά περισσότερα :D
  21. 100% trusted and a very smart and skilled person. i reccomend him ofc Good luck bro :)
×
×
  • Create New...