Jump to content

Recommended Posts

Posted (edited)

Apo Eosforistiko blog:

 

Βιβλία ντυμένα με ανθρώπινο δέρμα στις βιβλιοθήκες διάσημων πανεπιστημίων και το χαμένο Βιβλίο του Σατανά!

 

Έτυχε ποτέ να πάτε σε βιβλιοθήκη και κάποιο βιβλίο να μυρίζει χειμωνιάτικα αντιηλιακό; Γίναμε λίγο κάφροι αλλά αυτό το ερώτημα είναι η καλύτερη εισαγωγή για το παρακάτω άρθρο που μιλάει για την τέχνη ντυσίματος βιβλίων με ανθρώπινο δέρμα, ιστορία άγνωστη για τους περισσότερους. Το θέμα αυτό είναι επίκαιρο και για την δική μας περίπτωση διότι ένα παρόμοιο τύπου βιβλίου από ανθρώπινο δέρμα και αίμα από θυσίες έχει γραφτεί και από τον Σατανά σύμφωνα με την Παράδοση, το οποίο δόθηκε σε 12 μαθητές-Αποστόλους Του όπως έκανε και ο Χριστός, με σκοπό την διάδωση της γνώσης Του. Επειδή όμως αυτό το Βιβλίο δεν βρέθηκε ποτέ επειδή εξαφανίστηκε, άρα και η ΟΛΟΚΛΗΡΩΜΕΝΗ θρησκεία του Εωσφόρου-Σατανά, έχουμε σήμεραarrow-10x10.png απλά θραύσματα της θρησκείας Του και όχι ολοκληρωμένη όπως είπαμε σε άρθρο μας. Σύμφωνα με πληροφορίες που είχα από έναν ορθόδοξο Βιβλικό σατανιστή το Βιβλίο αυτό καλείται ''De Mysteriis Dom Sathanas''  όπως και ο τίτλος του δίσκου των Mayhem δηλαδή που σκοπίμως χρησιμοποίησε ο Euronymous επειδή το είχε στην κατοχή του ή κάποιο μέρος του. Στο ομώνυμο τραγούδι που το παρουσιάσαμε ήδη σε σχετικό άρθρο μας στην κατηγορία της ΜΟΥΣΙΚΗΣ μας, στους στίχους του που παραθέσαμε υπάρχουν και κάποια λατινικά τα οποία αυτός ο φίλοςarrow-10x10.png σατανιστής μου έδωσε την μετάφραση και μου είπε ότι απευθύνεται σε τελετουργικό ζωοθυσίας, λέγοντας μου τα παρακάτω:

 

(Devon):

 

De Mysteriis Dom Sathanas

 

Ta Latinika tou en logo asmatos metafrazontai os eksis:

De Mysteriis Dom Sathanas = Sxetikos me ta mustiria tou Arxontos Satana

Heic Noenum Pax = Edo den uparxei eirini

De Grandae Vus Antiquus Mulum Tristis Arcanas Mysteria Scriptum = Sxetikos me to panarxaio, kakovoulo katifes (lupimeno) apokrufistiko mustirio pou egrafi...

Invoco cruentus domini de daemonium = Aimatovammenos kalo ton Arxonta ton Daimonon

Rex sacrificulus mortifer = Vasileus, Thusiastis, Thanatoforos...

Psychomantum et precor exito annos major ferus netandus sacerdos magus = Profiti ton nekron, proseuxomai me ta esxata xronia ektenestera, Agrie Antithee Mage (polla lathi, ego prospatho na vgalo to noima)

Mortem Animalium = O thanatos ton zoon...

Exei arketa lathi sta latinika to en logo asma, alla einai ekpliktiki psalmodia... Aplos perigrafei mia zoothusia... Tis epikliseis pou kanei endexetai na tis vrike ap' auto to vivlio gia to opoio milouse, alla na itan grammeno se alli glossa kai oxi latisti... eksou kai ta lathi tou sta latinika... Ta vasiko tou lathos einai oti xrisimopoiei sunexos "um" epeidi einai xaraktiristiko ton latinikon kai einai ola grammena se periergo (isos norvigiko I aggliko) anti latinikou suntaktikou kai grammatikis...

En antithesei me to asma pou paratheto anothen, sto paron arthro, pou den exei kanena lathos sta latinika tou, kai den uparxei kai kanena lathos sti metafrasi mou pisteuo, epomenos mporei na xrisimopoiithei aristos os psalmodia se teleti...

- Blasphemus / Eurunomos

 

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


Στη Νομική Σχολή του Harvard και γενικά στις καλύτερες βιβλιοθήκες των ΗΠΑ (πανεπιστήμιο Brown – John Hay Library), πανεπιστήμιο της Georgia, College of Physicians της Philadelphia, Δημόσια Βιβλιοθήκη του Cleveland, Εθνική Βιβλιοθήκη Ιατρικής του Maryland, όπως και στην Εθνική Βιβλιοθήκη της Αυστραλίας, υπάρχουν βιβλία ωραία και δερματόδετα. Τα ανοίγεις και καμαρώνεις τη βιβλιοδεσία.

 

Μόνο που σε κάποια από αυτά το δέρμα των εξωφύλλων προέρχεται από πτώματα φτωχών,
εγκαταλελειμμένων ανθρώπων και εκτελεσθέντων καταδίκων! Αντικείμενα γοητείας (!) για κάποιους – αηδίας για τους περισσότερους, τα βιβλία αυτά έχουν μεγάλη συλλεκτική αξία. Όσοι τα καμαρώνουν διατείνονται ότι μπορείς να διακρίνεις καθαρά τους πόρους του ανθρώπινου δέρματος στα εξώφυλλά τους!

 

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

 

Μακάβριο και σαδιστικό

 

Η πρακτική της βιβλιοδεσίας με ανθρώπινο δέρμα ήταν πολύ… της μόδας ανάμεσα σε Γάλλους και Άγγλους ευγενείς (!) του 16ου – 18ου αιώνα. Είχε μάλιστα και όνομα: Ανθρωποδερμική βιβλιοδεσία. Αποτρόπαια καλύμματα βιβλίων (ακόμα και με δέρμα από γυναικείο στήθος, μαζί με τις θηλές) στόλιζαν ερωτικά βιβλία, προσευχητάρια, οδηγίες για μαγικά ξόρκια, αστρονομικές μελέτες, δικαστικούς φακέλους, βιβλία ανατομίας κ.ά. Το δέρμα έπαιρναν γιατροί από αζήτητα πτώματα αγνώστων (που εύρισκαν σε σχολές ιατρικής) ή από πτώματα εγκληματιών που καταδικάζονταν σε θάνατο.

 

Για τους εγκληματίες μάλιστα πίστευαν ότι με το να γδάρουν το πτώμα τους για να ντύσουν βιβλία, ήταν σαν να συνέχιζαν να τους τιμωρούν και μετά θάνατον. Για παράδειγμα, το δέρμα από το πτώμα ενός Ιησουίτη ιερέα, που απαγχονίστηκε κατηγορούμενος για προδοσία και συμμετοχή στη Συνωμοσία της Πυρίτιδας (είχε στόχο την ανατίναξη του Αγγλικού Κοινοβουλίου, στις 5 Νοεμβρίου 1605), κατέληξε να γίνει κάλυμμα βιβλίων, σύμφωνα με το BBC. Την ίδια τύχη είχε το 1827 το δέρμα γνωστού Άγγλου εγκληματία της εποχής: μετά την εκτέλεσή του χρησιμοποιήθηκε για να ντυθεί ο αστυνομικός του φάκελος.

 

Δώριζαν το δέρμα τους μετά θάνατον!

 

Η παράνοια της εποχής έφτανε μάλιστα μέχρι του σημείου κάποιοι να αφήνουν διαθήκη να χρησιμοποιηθεί το δέρμα τους (μετά θάνατον) για εξώφυλλο βιβλίου και να προσφερθεί ως δώροarrow-10x10.png σε αγαπημένα τους πρόσωπα. Αυτό θεωρούνταν εκλεκτό δώρο, ακόμα και… τρυφερά ερωτικό! Λέγεται ότι μια Γαλλίδα κόμισσα (που πέθανε σε νεαρή ηλικία από φυματίωση) δώρισε μια λουρίδα από το δέρμα των ώμων της σε Γάλλο αστρονόμο (του οποίου υπήρξε θαυμάστρια), για να ντύσει το νέο βιβλίο του.

 

Από το Ψυχιατρείο στη… βιβλιοθήκη του Harvard

 

Το βιβλίο του Γάλλου λογοτέχνη Arsène Houssaye με τίτλο «Η μοίρα της ψυχής» (μια διατριβή για την ψυχή και τη μεταθανάτια ζωή) «ντύθηκε» από κάποιον γιατρό, φίλο του συγγραφέα, με δέρμα που πάρθηκε από την πλάτη μιας άτυχης γυναίκας η οποία πέθανε από αποπληξία. Σύμφωνα με το σημείωμα του βιβλίου (στην επάνω φωτογραφία), η γυναίκα ήταν έγκλειστη σε γαλλικό ψυχιατρείο κάπου στα μέσα της δεκαετίας του 1880. Το πτώμα της κατέληξε στα αζήτητα, οπότε ο γιατρός σκέφτηκε ότι ένα βιβλίο για την ανθρώπινη ψυχή δε θα μπορούσε παρά να είναι ντυμένο με… ανθρώπινο δέρμα. Το πολύτιμο βιβλίο κοσμεί σήμεραarrow-10x10.png τη βιβλιοθήκη του πανεπιστημίου του Harvard (Houghton Library).

 

Ανθρώπινα δέρματα σε διάφορες ποιότητες και χρώματα!

 

Σύμφωνα με τους Los Angelesarrow-10x10.png Times, πολλές αξιόλογες βιβλιοθήκες έλαβαν παρόμοια βιβλία ως δωρεά ή τα αγόρασαν από ιδιωτικές συλλογές πλούσιων βιβλιόφιλων. Όπως το βιβλίο του 1816 με τίτλο «Ο χορός του θανάτου», που ντύθηκε… καθωσπρέπει με ανθρώπινο δέρμα το 1893. Το βιβλίο έχει εμπροσθόφυλλο κάπως τραχύ αλλά οπισθόφυλλο μαλακό σαν καστόρι, αφού χρησιμοποιήθηκε δέρμα από διαφορετικά μέρη του ανθρώπινου σώματος. Τι πραγματεύεται; Το γεγονός ότι ο θάνατος υπερισχύει σε όλους, πλούσιους και φτωχούς. Επίσης βρίσκουμε τα απομνημονεύματα ενός ληστή ντυμένα με το ίδιο του το δέρμα, όπως και ένα εγχειρίδιο των ισπανικών νόμων δεμένο με μαυρισμένο ανθρώπινο δέρμα, το οποίο ανήκε σε κάποιον άτυχο που γδάρθηκε ζωντανός το 1632, όταν έπεσε στα χέρια μιας αφρικανικής φυλής. Επιπλέον, ένας γιατρός είχε τη φαεινή ιδέα να ντύσει τρεις τόμους ιατρικής με το προσβεβλημένο από παρασιτική ασθένεια δέρμα ενός ασθενούς του!

 

Πώς ξεχωρίζει το ανθρώπινο δέρμα;

 

Χοίρος, μοσχάρι ή άνθρωπος; Πώς ξεχωρίζει το ανθρώπινο δέρμα από εκείνο των ζώων; Όπως λένε οι ειδικοί, το ανθρώπινο δέρμα διακρίνεται από τις λεπτομέρειες και θέλει εκπαιδευμένο μάτι. Έχει διαφορετικό σχήμα και μέγεθος πόρων αλλά και μια χαρακτηριστική κηρώδη μυρωδιά. Το χρώμα του είναι συνήθως υποκίτρινο, χρυσοπράσινο ή χρυσοκαφέ. Όμως επειδή τα…γούστα ποικίλλουν, κάποιοι από τους βιβλιοδέτες έχουν δείξει προτίμηση σε πιο σκούρο ανθρώπινο δέρμα (αφρικανικό, βαμμένο τεχνητά ή μαυρισμένο λόγω αποσύνθεσης), καλογυαλισμένο ή με τατουάζ.

 

Γερμανικοί κορσέδες και δανέζικες τιμωρίες

 

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

 

Πορτοφόλια, τσάντες και αμπαζούρ

 

Πόσες χρήσεις μπορεί να έχει το ανθρώπινο δέρμα; Προφανώς όσες και το δέρμα των ζώων. Παράδειγμα, από το δέρμα ενός εκτελεσθέντος μανιακού δολοφόνου – το 1833 – φτιάχτηκαν (εκτός από εξώφυλλα βιβλίων) πορτοφόλια, τσάντες και αμπαζούρ.

 

Ευτυχώς που υπάρχει η τεχνολογία!

 

Ευτυχώς τουλάχιστον που η νέα τεχνολογία είναι με το… μέρος όσων λατρεύουν (ακόμα…) το ανθρώπινο δέρμα. Αν θελήσουν να συνεχίσουν την παράδοση της Ανθρωποδερμικής βιβλιοδεσίας (και όχι μόνο…), δε χρειάζεται πλέον να γδάρουν άνθρωπο. Οι νέοι εκτυπωτές inkjet θα μπορούν κάποια στιγμή να τυπώνουν λωρίδες τεχνητού δέρματος, απόλυτα πειστικού.

 

Skin-Main.jpg

Edited by GehorchtMir
Posted

 

Kithara / Stixoi: Euronymous

Vocals: Attila Csihar

Drums: Hellhammer

Mpaso o poustopoustas Varg Vikernes tou opoiou tin summetoxi eixe uposxethei o Hellhammer stous goneis tou Euronymous na afairesei ap' to album alla den to ekane...

 

Welcome !
To the elder ruins again.
The windarrow-10x10.png whispers beside the deep forest.
Darkness will show us the way

"Heic noenum pax."
Here is no peace.
The sky has darkened thirteen as
We are collected woeful around a book
Made of human flesh.
"De grandaevus antiquus mulum tristis,
Arcanas mysteria scriptum".
The books bloodwritten pages openarrow-10x10.png.
"Invoco cruentus domini de daemonium"
We follow with our whit eyes The cermonials proceeding.
Bring us the goat.
"Rex sacriticulus mortifer".
In the circle of stone coffins.
We are standing with our black robes on,
Holding the bowl with unholy wather.
"Psychomantum et precor exito annos major
Ferus netandus sacerdos magus."

"Mortem animalium"

Posted

ΒΡΕΙΤΕ ΜΟΥ ΤΟΝ WRD

Μας έχει προδώσει το μουνόπανο και με αγνοεί και επιδεικτικά.

Posted

Exasa 150 eura epeidi mou paikse poustia o psuxiatros kai de pige gia jiatrio exthes kai simera kai tha paei ti deutera... Kai anagkastika, re malaka mou, na pouliso preza se alvano... Den einai na tous empisteuesai autous... Einai uperifanoi pou einai alvanoi, re malaka mou, katalavaineis? Yperifanoi pou to mono pou ekanan itan xeironaktikes douleies kai na xasoun otan polemisan me ton Dareio enantion tou Aleksandrou... Me to paramikro pou tha tous kaneis tha se prodosoun kai tha se roufianepsoun...

Posted (edited)

xamogela

 

To agapimeno mou tragoudi sto piano otan paizo... An kai to ksekinao re, re ufaisi, re... Einai lathos alla einai pio gamato etsi...

Edited by GehorchtMir
Posted

πες μου.

 

βλέπω τον πρεζάκια τον devon να μιλάει συνέχεια και δεν παρακολουθώ

Rotao, den to leo... Ean po oti i xusopontismeni (ek tou pontizo px. "katapontizo", oxi potizo) kai flokopedomeni manna sou exei ginei san zontano suspomeno skatino zele ap' tous pollous karkinous pou tis futrosa kai proeksexoun mexri kai ap' ta matia, tha fao ban???

Guest
This topic is now closed to further replies.



  • Posts

    • 🔥 L2Gold.co x15 Interlude Server 2025 – Grand Opening! 🔥 Join us today and be part of the legendary L2Gold community! 🎉 Grand Opening: 14 March 2025 🎉 ⏰ Time: 21:00 GMT +2 🌍 Server Type: EURO PTS/L2OFF 🌟 Why Play on L2Gold.co? 🌟 ✅ No Wipes – Keep Your Progress Forever! Your characters and progress are permanent. No resets! ✅ Balanced & Fun Gameplay! Experience x15 rates for a smooth and enjoyable progression. ✅ Solo or Party Play Use MP potions and NPC buffers for a great solo experience or team up with friends. ✅ Long-Term Stability Our server is built to last with no interruptions! 📊 Server Rates & Details 📊 Category Rate EXP/SP x15 (Official rate without rune or VIP) Adena x10 (Official rate without rune or VIP) Drop x10 (Official rate without rune or VIP) Spoil x10 (Official rate without rune or VIP) Raid Boss Drop x10 (Official rate without rune or VIP) 🚀 Exciting New Features! 🚀 🎟️ 💰 Weekly Lottery System! – Win rare items, in-game currency, and exclusive rewards! 🎁 More Events & Rewards! – Special in-game activities with exclusive items! 📈 Real-Time Stats! – Track your progress, achievements, and rankings live! ⚔️ New Items Weekly! – Discover rare gear and unique items every week! 🌍 A Growing Global Community 🌍 Players from Greece 🇬🇷, Brazil 🇧🇷, Spain 🇪🇸, and beyond! 🔗 Stay Connected 🔗 Follow us on social media to stay updated! 🌎 Website: L2Gold.co 🎙️ Discord: Server 📘 Facebook: Page | Group 🎥 YouTube:   Watch Videos 🎵 TikTok: Follow Us 🔥 Prepare for Battle! 🔥 📅 The adventure begins on 14 March 2025! Join L2Gold.co and Experience an Unforgettable Adventure! 🎮✨
    • y girate unos archivitos del powerclass dale..... sin encrypt
    • Hi, im looking for cardinal pvp script for auto cleanse/rez/nobles etc etc and guide on how to setup as well as what programms do i need to run such scripts as i have never used any helper or something before,
    • [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!!! 🙂
  • Topics

×
×
  • Create New...