Jump to content

Πληροφορίες Για Νέους L2Off Developers.


Recommended Posts

H διαχειριση μνημης δεν ειναι κακή, η παραμετροποίηση ειναι κακή.

Ποιός ρυθμιζει την μνημη οταν στηνει L2J στο core με βαση την Ram του συστήματος? Ποιος ρυθμιζει τα μεγιστα και ελλάχιστα σημεία διαχείρισης στην μηχανή με βαση την Ram? Ποιός ξερει τι ειναι ο σκουπιδιάρης, πως λειτουργεί και πως ρυθμιζεται?

O server μου ξεκινα page με 2.3Gb, ολα 64bit dedicated, ρυθμιζμενος ο σκουπιδιαρης στο java core 1024Mb. Οταν εφτασε 200 ατομα online to page μετα απο 12 ωρες ήταν 2.2Gb, γιατι ο σκουπιδιαρης μαζεψε και πεταξε εξω όλα τα αχρηστα data απο την ram.

Τον σκουπιδιαρη δεν χρειαζεται να τον γραψεις ουτως ή αλλως. Να τον παραμετροποιήσεις χρειάζεται, οι περισσοτεροι πχ. δινουν ram στην java -Xmx 1024 (default)  και στον σκουπιδιαρη 256Μb. Aν 50 ατομα παιζουν για 8-10 ωρες γέμισε και ο server θελει restart...

Το ιδιο μηχανημα με 1024 ( -Xmx1024m ) και MaxPermSize=1024Μb θα χρησιμοποιήσει μεχρι 2048Mb απο την ram, το διπλάσιο δηλαδή και θα χρειαστεί επανεκκινηση σε 1 μηνα. Ο garbage ελεγχεται απο το permSize και χρησιμοποιήται βασικα για πραγματα που δεν κινούνται στην διαχείριση της Java ή απλα κινούνται συνέχεια. πχ ενα siege τρωει λιγοτερη Χm ram και περισσοτερη Perm, ενα Raid boss ή ενα duel επίσης, καθως και ενας παικτης αραχτός στην Giran για 5 ωρες...

 

Oυσιαστικα τα προβλήματα ερχονται απο αγνοια διαχειριστών περισσοτερο και λιγοτερο απο software bugs.

Link to comment
Share on other sites

H διαχειριση μνημης δεν ειναι κακή, η παραμετροποίηση ειναι κακή.

Ποιός ρυθμιζει την μνημη οταν στηνει L2J στο core με βαση την Ram του συστήματος? Ποιος ρυθμιζει τα μεγιστα και ελλάχιστα σημεία διαχείρισης στην μηχανή με βαση την Ram? Ποιός ξερει τι ειναι ο σκουπιδιάρης, πως λειτουργεί και πως ρυθμιζεται?

O server μου ξεκινα page με 2.3Gb, ολα 64bit dedicated, ρυθμιζμενος ο σκουπιδιαρης στο java core 1024Mb. Οταν εφτασε 200 ατομα online to page μετα απο 12 ωρες ήταν 2.2Gb, γιατι ο σκουπιδιαρης μαζεψε και πεταξε εξω όλα τα αχρηστα data απο την ram.

Τον σκουπιδιαρη δεν χρειαζεται να τον γραψεις ουτως ή αλλως. Να τον παραμετροποιήσεις χρειάζεται, οι περισσοτεροι πχ. δινουν ram στην java -Xmx 1024 (default)  και στον σκουπιδιαρη 256Μb. Aν 50 ατομα παιζουν για 8-10 ωρες γέμισε και ο server θελει restart...

Το ιδιο μηχανημα με 1024 ( -Xmx1024m ) και MaxPermSize=1024Μb θα χρησιμοποιήσει μεχρι 2048Mb απο την ram, το διπλάσιο δηλαδή και θα χρειαστεί επανεκκινηση σε 1 μηνα. Ο garbage ελεγχεται απο το permSize και χρησιμοποιήται βασικα για πραγματα που δεν κινούνται στην διαχείριση της Java ή απλα κινούνται συνέχεια. πχ ενα siege τρωει λιγοτερη Χm ram και περισσοτερη Perm, ενα Raid boss ή ενα duel επίσης, καθως και ενας παικτης αραχτός στην Giran για 5 ωρες...

 

Oυσιαστικα τα προβλήματα ερχονται απο αγνοια διαχειριστών περισσοτερο και λιγοτερο απο software bugs.

 

Den ta ksereis kala. To Xmx sou orizei Young kai Tenured space size ( Tenured = permenent pou les ). To ratio exei mia default timi , ektos an tin oriseis esi me parametro xxratio nomizo einai ? Anyway an esi doseis 1 giga xmx kai meta tou peis maxpermsize 1 giga episis, ayto den tah sou desmeysei 2 giga. Tha sou desmeysei 1 giga, to opio tha to xorisei se dio partitions ena gia young kai ena gia tenured. Kai dinei sto tenured tin dinatotita to command sou na desmeysei otan gemizei mexri kai olo to space. Otan omos arxisei logo memory leaks ktl to tenured na gemizei, tote pernei olo to meros apo to young. To young pezei olo kai sixnotera garbage collection giati den exei poli xoros kai ta objects dimiourgounte sixna me apotelesma na exeis me megalo frequency small Garbage collections. To kalitero einai to Tenured space na einai fixed kai megalo , oste akoma kai an gemisei na ginei full GC na adiasei ap omesa oti mporei.

 

Diladi den prepei na tou doseis full to space na to diaxirizete, giati etsi to afinis na krataei gia poli kairo antikeimena pou den xrisimopoiountai. PX enas char kathete online gia 2 meres, kai meta bgenei. An esena to GC exei ta privs na megalosei to tenured oso thelei, anti na kalesei full GC otan gemisei, tha megalonei olo kai perissotero kobontas space apo to young me apotelesma na krata mesa axrista pragmata ( ton char pou ekane logout meta apo 2 meres ) eno eprepe na ta kserasei me full GC kathe 5-6 ores ( gia to logou to alithes, poli pio sintoma ).

 

 

Link to comment
Share on other sites

Οκ όπως τα λες αφού τα γνωρίζεις καλύτερα... μονο που αναφερεις 2 πράγματα και κανεις σοβαρά λαθη και στα 2 :)

 

Δεν ειπα θα δεσμευσει 2Gb ... "Το ιδιο μηχανημα με 1024 ( -Xmx1024m ) και MaxPermSize=1024Μb θα χρησιμοποιήσει μεχρι 2048Mb απο την ram" (θα φτασει καπoια στιγμή τα 2Gb δηλαδή και δεν 'μοιραζεται'... 1ο μεγα και βασικό λαθος το Xmx παραμενει 1024), επίσης δεν ειπα πως per = garb "Ο garbage ελεγχεται απο το permSize και χρησιμοποιήται βασικα για πραγματα που δεν κινούνται στην διαχείριση της Java ή απλα κινούνται συνέχεια".

 

Επίσης 2ο μεγα και σημαντικό λαθος, τακτικές και PermGen δεν είναι το ίδιο, σχετίζονται, αλλά δεν είναι το ίδιο πράγμα. Οι ακριβείς λεπτομέρειες εξαρτώνται από την εφαρμογή της JVM που χρησιμοποιούμε, αλλά και απο το Page που συνδέονται με αυτήν.

Μια τρίτη γενιά συνδέεται στενά με την τακτική γενιά και αυτή είναι η μόνιμη γενιά. Η μόνιμη γενιά είναι ιδιαίτερη διότι διαθέτει στοιχεία που απαιτούνται από την εικονική μηχανή για να περιγράψει τα αντικείμενα που δεν έχουν ισοδυναμία στο επίπεδο γλώσσας Java. Για παράδειγμα, τα αντικείμενα που περιγράφουν τις κατηγορίες και είναι σαν μέθοδοι αποθηκευμένες στη μόνιμη γενιά.

Επίσης τυχόν 'strings' που έχουν εγκλεισθεί και λεπτομέρειες 'τάξης', αυτές συνήθως αποθηκεύονται σε Perm, ενώ ειναι τακτικοί με μεγάλη διάρκεια ζωής των αντικειμένων Java.

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

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

 

"Στου κουφου την πορτα οσο θελεις βροντα" Ελληνική λαϊκή ρήση που εχει πολυ βαθύ στοχαμό, με απεριόριστη μεταφορά αλληγοριακών συμβάντων στην κοινωνία του δήθεν:)

Link to comment
Share on other sites

 

"Στου κουφου την πορτα οσο θελεις βροντα" Ελληνική λαϊκή ρήση που εχει πολυ βαθύ στοχαμό, με απεριόριστη μεταφορά αλληγοριακών συμβάντων στην κοινωνία του δήθεν:)

 

Εγώ είμαι ο κουφός φυσικά, αλλά κάποιος άλλος δίνει 1024m στο heap που κρατάει class definitions και νομίζει θα πάει ένα μήνα για αυτό το λόγο. Εκτός αν ο server σου κάνει class reloading κάθε λεπτό, και χρειάζεται να μαζεύεις παλιά class objects συνεχώς, τι να πω ... enlighten me ..

Link to comment
Share on other sites

"Στου κουφου την πορτα οσο θελεις βροντα" Ελληνική λαϊκή ρήση που εχει πολυ βαθύ στοχαμό, με απεριόριστη μεταφορά αλληγοριακών συμβάντων...

 

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

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

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

 

Ναι αν προκαθορισεις την ram με βαση τα ατομα που θελεις να διαχειριστείς και ρυθμισεις σωστα τον server θα μπορεις να κανεις restart μια φορα την βδομαδα. Πειτε μου τυπο server, λειτουργικό σύστημα, max connections και μπορω να υπολογισω την ram και τις ρυθμισεις της με πολυ καλη προσέγγιση.

Οποιος υποτίθεται γνωστης δεν μπορει να το κανει αυτό τοτε ειναι ενας χημικός που δεν γνωρίζει τα ml που χωρανε οι πειραματικοί δοκιμαστικοί σωλήνες του... δηλαδή συντομα θα εχουμε μια καλή εκρηξη... στην περιπτωση μας server crash.

Link to comment
Share on other sites

Όταν λες τις ρυθμίσεις της ram τι εννοείς ? Γιατί για τον garbace collector παίζει μεγάλο ρόλο ο server, περισσότερο από την δομή του μηχανήματος. Για το πώς ρυθμίζεις τον Garbace collector δεν υπάρχει συγκεκριμένη πρόταση. Άν διαβάσεις 10 διαφορετικά papers από 10 διαφορετικά πανεπιστήμια, θα πάρεις 100 διαφορετικές απαντήσεις για το πώς ο garbage collector πρέπει να γίνει tune. Και με το δίκιο τους. Ένας server πχ που κάνει create μικρά object με μεγάλο rate και μικρό life-time θέλει τελείως διαφορετικό setup από ένα server με τις αντίθετες ρυθμίσεις.

 

Τώρα που το σκέφτομαι θα ήταν καλή ιδέα να γράψουμε ένα tool (αν δεν υπάρχει ήδη ) που κάνει monitoring τον server σου gia object creation frequencies/sizes etc και να κάνει στο τέλος ένα profiling των αποτελεσμάτων από τις μετρήσεις που πήρε για μία εβδομάδα πχ. Για να μπορεί κανείς να βλέπει στο περίπου πώς ανταποκρίνεται ο server του και να ρυθμίζει τον GC πιο σωστά.

Link to comment
Share on other sites

Ετσι ειναι και για τον λογο αυτον επιμενω λίγο... αν κοιταξεις σε 20 Πανεπιστημια θα παρεις 200... χαχα

Τα ποιο πολλα θεματα αυτου του τυπου επιλύονται με τεχνικες που βασιζονται στην στατιστική παρακολούθηση.

Καταρχήν "οι ακριβείς λεπτομέρειες εξαρτώνται από την εφαρμογή της JVM που χρησιμοποιούμε, αλλά και απο το Page που συνδέονται με αυτήν".

Σημειωσε πως εχω γραψει σε VB software που παρακολουθει συνεχώς τον server και μεσα απο καναλια με την βοήθεια του Winsock εχω τα δεδομενα σχεδόν real time στο pc μου (καθε 5  sec), θελω να το δημοσιοποιήσω σύντομα με την μορφή realTop με auto login Vote system and game statistics σαν το πλεον αξιόπιστο συστημα τυπου top100.

Επίσης εχω μονιμο ενα 2ο test server οπου γινονται ολες οι δοκιμές πριν την μεταφορα τους στον main server. Για το λογο αυτο ο live server ειναι 100% uptime και δεν εχει σκασιματα.

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

Το παρατηρησα οταν δοκιμαζα στην αρχή τον server παιζοντας στα ορια μνημης και ποσοτητας δεδομένων. Ειχε φτασει σε ενα config πορων-δεδομενων να λειτουργει μονιμα με 40% χρέωση στον CPU με ενα admin online ολο και ολο.

Αυτο μου κινησε την περιέργεια και αρχισα να καταγραφω τις συμπεριφορές του, οχι τοσο για το L2, αλλα περισσοτερο για την Java.

Κατεληξα τοτε στο οτι o L2j οποιοδήποτε πρόβλημα ή μικροπρόβλημα φορτωνω-ξεφορτώνω δεδομένα το ρίχνει στην CPU.

Εκει τεθηκε το πρώτο ερώτημα για το πως και γιατί. ( υποτιθεται πως οι γνωσεις μου ειναι SQL, C++ και VB.net και VB6).

Παρατήρησα συμπεριφορές που δεν ειχα γνωρισει μεχρι αυτην την στιγμή. Η πρωτες μου μετρήσεις ειχαν να κανουν με τα πακετα του αρχικού φορτώματος στην ram. Εκεί λύθηκε ευκολα οπου με ενα προχειρο υπολογισμό αποδείχθηκε πως αντι να εχεις πολλή ram στην JVM καλύτερα να εχεις πολύ ram στον MySQL, να εχει δηλαδή οσον το δυνατον γρηγορότερη απάντηση στα ερωτήματα. Γλυτώνει το stack η μηχανή και ταυτόχρονα δεν γεμιζει το καζανι αναμονής. Αυτα όμως τα αναπαντητα ερωτήματα οσο συσσωρευονται τοσο περισσοτερο μετακινούν δεδομένα προς τον garbage, οπου γεμιζει γρηγορα και εκει ολα τελειώνουν, σε σωζει το restart. Σε καποια δοκιμή μου στακαρισε ακομα και τον mySQL με αποτέλεσμα να εχει 10πλάσια ποσοτητα επαναλαμβανόμενων δεδομένων στην μνήμη του.

Ας δουμε καποιο παραδειγμα, οταν λεω ρυθμιση μνημης δεν εννοώ τιποτε περισσοτερο απο καλή διαχείριση της διαθεσιμης μνήμης Ram του server.

Πρωτα απο ολα συμφωνουμε στο οτι o garbage δεν οριζεται από τον προγραμματιστή, αλλα μπορούμε με τεχνικες να οδηγήσουμε σε αυτον τα δεδομενα που θελουμε, σαν τους cownboys που οδηγούν το κοπαδι εκει που θελουν. Το πρωτο που παρατηρησα διαβαζοντας ηταν το προβλημα της εκδοσης java και του MySQL. Συμπερασματικα ξεκίνησα με τελευταιες εκδοσεις 1.6.2 και 5.5 στα 64 bit και τα περασα και στο core του game. To eclipse εχω να το αναβαθμισω 4-5 μηνες, αναφερει πως δεν μπορει να διαχειρισθει αυτες τις εκδοσεις αλλα το compile το κανει μια χαρά μιας και ο compiler ειναι εξωτερικός. Οι τελευταίες εκδοσεις της java εχουν απο μονες τους καλύτερη διαχείρηση στις 2ης και 3ης ταξης κατανομές δεδομένων.

 

Στην J2SE 1.4 υπήρχαν τέσσερις συλλέκτες απορριμμάτων οπου μπορουσε να επιλέξει ο χρηστης μια, αλλα δεν υπήρχε σαφήνεια για την απόδοση του συστήματος αναλογα με την επιλογή που θα έκανε. Στην έκδοση 1.5.0 η επιλογή του συλλέκτη στηρίζεται στην κατηγορία της μηχανής κατά την οποία η εφαρμογή θα ξεκινήσει με τον ορισμο και θα τον ακολουθήση σε μονιμη βάση. Επισης στις νεες εκδοσεις μπορει ο χρήστης να ορισει τις δυνατοτητες συλλογής απορριμμάτων με παύσεις, μέτρια συχνότητα και τη διάρκεια συλλογής.

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

Επομένως το πρωτο που πρεπει να μετρήσουμε ειναι το μεγεθος των πακέτων προς ξεσκαρτάρισμα, τον μεσο αριθμό τους, και τον χρόνο αναγκαιας αμεσης διαγραφής.

Αν για παράδειγμα δαπανήσουμε το 1% του χρόνου στη συλλογή των απορριμμάτων σε ένα σύστημα μονοεπεξεργαστικό αυτό μεταφράζεται σε περισσότερο από μια απώλεια 20% στην απόδοση για 32bit συστήματα. Στο 10% του χρόνου το ξεσκαρτάρισμα, που φυσικά δεν θεωρείται εξωφρενικό ποσό του χρόνου στη συλλογή απορριμμάτων στις αιτήσεις μονοεπεξεργαστικού συστήματος, ποσο περισσοτερο τοτε που το 75% της διακίνησης χάνεται όταν η κλιμάκωση ανεβει μέχρι και 16 ή και 32 επεξεργαστές. Οι περισσοτεροι servers ειναι σημερα τετραπύρηνοι και συμπερασματικα το 25% της διακίνησης το γλυτώνουμε μονο και μονο με την χρήση συσστήματος, java και mySql στα 64bit.

Από την έκδοση J2SE Πλατφόρμα 1.5x είναι ένα χαρακτηριστικό που αναφέρεται απο τον παραγωγό ως εργονομία. Ο στόχος της εργονομίας είναι να προσφέρει καλή απόδοση από το JVM με ελάχιστη ρύθμιση της γραμμής εντολών (αυτο βεβαια στην .net αρχισε το 2005). Η εργονομία προσπαθεί να επιτύχει την καλύτερη επιλογή αναμεσα σε Garbage collector, Heap size και Runtime compiler.

Αυτο ακριβώς ειναι το σημείο στο οποίο εμεις βαζουμε το χερι μας και προσπαθούμε να εκμεταλλευτούμε με τον καλύτερο δυανατόν τρόπο.

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

Ο ποιο 'καλος' τροπος θα προτεινα ειναι απευθείας στην GC με την χρήση της εντολής επιχείρημα +PrintGCTimeStamps (εγγραφή σε log file) ή την -verbose: GC η οποία εκτυπώνει τις πληροφορίες σε κάθε συλλογή που γίνεται και εχει την μορφή (εξαρταται βεβαια και απο την εκδοση της JVM):

 [GC 235555K->75000K(69852K), 0.2300771 secs]

 [GC xxxxxxK->xxxxxK(xxxxxK), 0.2454258 secs]

 [GC xxxxxxK->xxxxxK(xxxxxK), 0.2254258 secs] και κλείνει με

 [Full GC 235458K->72333K(695665K), 1.8479984 secs]

 

Αυτο το 1.8479984 περιπου δηλαδή 2 sec θα παγωσει τον gameserver για 1.8 secs ή θα τον 'λαγκάρει'. Αν ο server εχει πολυ κόσμο μεσα σε αυτο το 1.8 sec θα συσσωρευθούν νέα αιτήματα και ο server θα κρασαρει πολυ σύντομα ( εδω ειναι θεμα μεγεθους μνημης ram, για τα ποσα sec θα αντέξει).

Σε ενα 4πυρηνο με 64bit ολα και νεες εκδοσεις JVM, mySql ειναι απο μονο του 25% μικροτερο.

Αν εμεις γνωρίζουμε τα πακετα και ανεβασουμε τον σκουπιδιαρη σε μεγεθος αριθμού πακέτων * μεγεθος πακετων / χρονο ξεσκαρταρισματος το αποτέλεσμα ειναι - Χ% lag του σερβερ <> - % stuck <> -% CPU <> και τελικα χαλαό άδειασμα χωρις καμια επιπτωση στην απόδοση, που και αυτο με την σειρα του καταλήγει υπο απόλυτες συνθήκες server restart ποτε για αυτο τον λογο. Δεν ξερω αν ειναι εφικτο αλλα αξιζει να το προσεγγίσει οσο μπορεί ο καθενας.

Επειδή ομως ο σκουπιδιαρης δεν οριζεται πλήρως παρα μονο σαν 'τυπος-ειδος', γινομαστε οι cownboys που θα οδηγήσουν το κοπαδι εκει μεσω του αμεσα συσχετισμένου μονοπατιού που ονομαζουμε PermGen και μπορουμε να το ορίσουμε σε μια υποδιαίρεση ram που εχουμε και θελουμε να διαχειρισθούμε για αυτη την συγκεκριμενη λειτουργία με βασικο γνωμονα και αναλογια του (1.8479984).

 

Link to comment
Share on other sites

  • 1 month later...
  • 4 weeks later...
  • 2 weeks later...

egw apiti ksero den iparxoun arxia original l2off (kai min mou pite oti ta klepsane apo ton official den exoume apodiksis gia afto) oyte kseri kanenas pos einai akribos rithmizmena ta skills tis ncsoft, ti thelo na pw, oti ta legomena arxia (pack l2off) den einai tipote parapanw apo arxi l2java pou ta exoun pari orizmeni Developers kai ta exwn metatrepisi me tin doithia metaglotisti se arxia c++ opote an ena skill den einai sosta rithmizmeno stin java den tha einai rithmizmeno kai stin c++ kai min mou pi kanis oti i Developers kseroun akribos na rithmizoune ola ta skills opos ta exi o official oute einai dinaton na kseri enas Developer 100% olo to linege kai pos einai i simperifora olon ton xaraxtiron, kai ala pola den xriazete na ta analiso kserete ti lew, skeftite oti stin ncsof  iparxioun 6-7 omades me Developers pou i kathe omada exi analabi 1 komati apo to stisimo tou lineage, kai skeftite afti i terastia eteri me tetia organosi kai korifeous Developers pou plirononte poli kala kata kerous exoune brethi bugs, tha sas po ena xaraxtiristiko bug ston official osi pezate tha to thimaste i redsky ston teon ixan bri bug kai pigenane ta skills +30, opote min lete oti afta ta legomena pack l2off einai kathara apo bugs, sigoura einai pio kala apo ena l2j server nai, ala se kamia periptosi den einai official

Link to comment
Share on other sites

  • 2 weeks later...
  • 3 weeks later...

Να ρωτήσω,εγώ που θα πάω να γραφτό σήμερα για μάθω την γλώσσα C++...τι να του πω; γιατί θέλω να μάθω αυτό το συγκεκριμένο πράγμα για το L2,να του πω να με μάθει να φτιάχνω pack Off και να γίνω Developer;

 

Δώστε μου συμβουλές...

Link to comment
Share on other sites

Να ρωτήσω,εγώ που θα πάω να γραφτό σήμερα για μάθω την γλώσσα C++...τι να του πω; γιατί θέλω να μάθω αυτό το συγκεκριμένο πράγμα για το L2,να του πω να με μάθει να φτιάχνω pack Off και να γίνω Developer;

 

Δώστε μου συμβουλές...

LOL 1oν πρεπει να μαθεις C#!

2oν απο e-books ή πίγεναι σε βιβλιοπολεία για να αγοράσεις βιβλία για το θεμα αυτο!

3ον αν μαθεις άπιαστη C# και ασχοληθείς αποκλειστικά με  το l2 τοτε μην μαθεις καθολου!

Η C# ειναι για σοβαρούς προγραμματιστές οχι για l2off pack μονάχα!

Link to comment
Share on other sites

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

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