Jump to content

Recommended Posts

Posted

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

Σήμερα πρόκειται να μάθετε πώς να φτιάξετε το δικό NPC Buffer μας, μπορείτε να προσθέσετε

το buff θέλετε, superhaste, άσματα, χοροί, buffs ήρωας, ευγένεια

buffs, songs, buffs hierophant, souls, κ.λπ. .. κλπ. ..

 

Παρατήρησα ότι όλοι οι άνθρωποι είναι allways αναζήτηση για μια NPC Buffer, αλλά

η αλήθεια είναι ότι ποτέ δεν θα βρείτε μια τέλεια, ώστε να είναι ο λόγος

Είμαι κάνει αυτό τον οδηγό για εσάς.

 

Πρώτα από όλα θα πρέπει να κάνουν υπομονή, αυτό δεν είναι ένα εύκολο οδηγό, αλλά αν

ακολουθείτε πάντα τύπου Ι, ξέρω ότι θα καταλάβει και θα σας

πάρετε την ικανότητα για να δημιουργήσετε το δικό σας

 

Πρώτα από όλα, αν έχετε ένα HTML editor όπως το Dreamweaver, το χρησιμοποιούν, αν

, Που δεν χρησιμοποιούν το σημειωματάριο, αν δεν σας αρέσει το σημειωματάριο, κατεβάστε το notepad + + Is

αρκετά δροσερή, δεν ξέρω πού να το πάρει;; μόλις πατήσετε το link

 

Αν

θέλετε να φτιάξετε το δικό σας νέο NPC ακολουθήσουν αυτό το μικρό οδηγό που ακολουθεί, Αν

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

εισέλθουν στο παιχνίδι και κάντε κλικ μετατόπιση του npc που θέλετε να επεξεργαστείτε και να δείτε την ταυτότητα,

τότε θα γράψει σε ένα χαρτί ή σε ένα μέρος που θα θυμάστε

 

ΒΗΜΑ ΠΡΩΤΟ:. Τη δημιουργία του νέου Εθνικού Λαϊκού Κογκρέσου

 

Πληκτρολογήστε το παιχνίδι Lineage II, θα βρείτε έναν NPC σας αρέσει, δεν ξέρω που, μπορείτε να

επέλεξε ένα Golem γρανίτη. Antharas, Valakas, Baium, gremlin, κ.λπ. .. κ.λπ..,

με λίγα λόγια επέλεξε ακριβώς favirite NPC σας πρότυπο

 

Πατήστε το πλήκτρο Shift και κάντε κλικ πάνω του, εκεί θα δείτε το NPC ID όπως στην εικόνα

 

 

Εισάγετε βάση δεδομένων MySQL σας και να δημιουργήσετε μια νέα γραμμή εκεί που τίθενται στο

στήλη αναγνωριστικό αριθμό που θέλετε, αλλά βεβαιωθείτε ότι δεν είναι σε χρήση, δοκιμάστε να χρησιμοποιήσετε

μερικές αριθμός σαν 99999

Οι άλλες στήλες αντίγραφο αυτών ακριβώς από το αρχικό NPC, αλλά βεβαιωθείτε ότι το aggro colunm είναι 0 και ο τύπος πρέπει να είναι "L2Npc"

Στο όνομα και ελάχιστο μόριο απλά βάλτε ό, τι θέλετε

Στην serversidename και serversidetittle τοποθέτησης 1

Αποθηκεύστε τη βάση δεδομένων σας και αυτό είναι όλο

 

ΒΗΜΑ ΔΕΥΤΕΡΟ:. ΕΠΙΜΕΛΕΙΑ NPC HTML σας (το κείμενο λέει)

 

Ανοιχτό πρόγραμμα επεξεργασίας HTML ή το σημειωματάριο, και επικολλήστε αυτόν τον κώδικα

 

Κωδικός:

 

 

 

 

L2 Ranger Buffer

 

 

 

Καλωσόρισμα

 

 

Μπορώ να σας βοηθήσω?

 

 

 

 

 

πηγαίνετε στο μενού αρχείο / αποθήκευση ως ..

όνομα ως "ID του Εθνικού Λαϊκού Κογκρέσου" σας. html για παράδειγμα, 1234.html

Μην ξεχάστε το. Html, είναι πολύ σημαντικό

Πρέπει να αποθηκεύσετε τα FILE INSITDE φάκελο \ GAMESERVER \ DATA \ HTML \ \ DEFAULT

 

Επεξήγηση του κώδικα,

"" & "" Μας λένε ότι είναι ένα έγγραφο HTML

"" & "" Μας λένε ότι τα πάντα μέσα σε αυτά είναι το περιεχόμενο του εγγράφου html

"

»Μας λένε ότι η επόμενη σειρά θα είναι στο κέντρο

"" & "" Μας λένε ότι θα δημιουργήσει έναν πίνακα

"" & "" Καθορίζει το χρώμα του κειμένου μέσα σε αυτά (χρώμα πρέπει να είναι σε hex μορφή)

"

"Νοείται μια γραμμή άλμα

"

θα δημιουργήσει μια Buton με το buff κείμενο μου, σας παρακαλώ δράση = "bypass-h% npc_ objectId% _Quest 9999_NPCBuffer" αυτή είναι η ενέργεια του κουμπιού, στην περίπτωση αυτή είναι να πάρετε την αναζήτηση με το όνομα 9999_NPCBuffer πλάτος = 75 πλάτος του κουμπιού ύψος = 21 ύψος του κουμπιού πίσω = "L2UI_ch3.Btn1_normalOn" αυτό είναι το πλαίσιο tha του κουμπιού προσκήνιο = "L2UI_ch3.Btn1_normal" αυτό είναι το πλάνο του κουμπιού> "

Σημειώστε ότι το ιστορικό και το πρώτο πλάνο είναι οι εικόνες clientside

 

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

αντί για προεπισκόπηση, εγώ θα τελειώσω σύντομα απλώς συγγνώμη για το λάθος LoL

 

ΒΗΜΑ ΤΡΙΤΟ:. ΔΗΜΙΟΥΡΓΙΑ ΤΟΥ BUFF FILES

 

 

Λόγω της σε html εμείς τύπου 9999_NPCBuffer μας, έχουμε τη δημιουργία ενός

φάκελος με αυτό το όνομα στο φάκελο gameserver \ στοιχείων \ \ custom JScript, εάν

θέλετε άλλο όνομα απλά να το αλλάξετε σε HTML αρχείο σας και στη συνέχεια να δημιουργήσετε ένα

φάκελο με το ίδιο όνομα

 

Πηγαίνετε στο νέο φάκελο σας, στην παρούσα υπόθεση gameserver \ στοιχείων \ \ JScript έθιμο \ 9999_NPCBuffer \

 

Εκεί δημιουργεί ένα αρχείο με όνομα "__init__.py" αν δεν ξέρεις πώς,

απλά ανοίξτε το σημειωματάριο και κάντε κλικ στο κουμπί Αποθήκευση ως και να την επικολλήσετε, μην ξεχνάτε

ότι πρέπει να έχουν την. py, χωρίς αυτό, ότι είναι ένα απλό αρχείο txt

 

Ανοικτή __init__.py σας υπάρχει wher θα θέσετε το buffs, εγώ θα μόλιs

εξηγήσει πώς να το κάνουμε, δεν θα το κάνω όλα τα buffer, που θα σας

εργασία στο σπίτι

 

Μέσα από το __init__.py θα επικολλήσετε αυτόν τον κώδικα

Κωδικός:

sys εισαγωγής

από την εισαγωγή net.sf.l2j.gameserver.model.actor.instance L2PcInstance

από java.util εισαγωγής Iterator

από την εισαγωγή net.sf.l2j.gameserver SkillTable

από net.sf.l2j εισαγωγής L2DatabaseFactory

από net.sf.l2j.gameserver.model.quest εισαγωγής μέλος

από net.sf.l2j.gameserver.model.quest εισαγωγής QuestState

από net.sf.l2j.gameserver.model.quest.jython εισαγωγής QuestJython ως JQuest

ΤΟ ΓΡΑΜΜΕΣ AVOVE εισάγουμε μερικά μόνο ΔΕΔΟΜΕΝΩΝ

NPC = [1234] ΕΔΩ βάζετε το ID ΤΟΥ ΣΑΣ NPC

ADENA_ID = 57 ΤΗΣ ΕΙΝΑΙ ΑΚΡΙΒΩΣ ΓΙΑ ΤΗΝ ΕΓΚΡΙΣΗ ADENA_ID ΑΝΤΙ ΤΟΥ 57

MIN_LEVEL = 40 Αυτό είναι το ελάχιστο επίπεδο για τη συμμετοχή τραχυμένου

QuestId = 9999 THIS IS THE ID ΤΟΥ QUEST

QuestName = "NPCBuffer" ΤΟ ΟΝΟΜΑ ΤΟΥ QUEST

QuestDesc = "έθιμο" Αυτός είναι ο φάκελος της αναζήτησης

InitialHtml = "1.htm" Αυτό είναι το αρχείο της Διεύθυνσης Διαβατηρίων THA σας θα αρχίσει

print "εισαγωγής" + QuestDesc + ":" + str (QuestId) + ":" + QuestName + ":" + QuestName,

class Quest (JQuest):

def __init__ (self, id, όνομα, descr): JQuest.__init__ (self, id, το όνομα, descr)

 

onEvent def (self, εκδήλωση, st):

htmltext εκδήλωση =

count = st.getQuestItemsCount (ADENA_ID) ΕΔΩ ΤΟ NPC GET YOUR ADENA

επίπεδο = st.getPlayer (). getLevel () ΕΔΩ ΤΟ NPC GET YOUR ΕΠΙΠΕΔΟ

αν μετράνε <200000 και επίπεδο <MIN_LEVEL:

htmltext = "Μπορείτε dont έχει αρκετό ADENA ή το επίπεδο είναι χαμηλότερο από st.getPlayer (). getLevel ()."

αλλού:

st.getPlayer (). setTarget (st.getPlayer ())

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

Αυτός ο κωδικός είναι πολύ εύκολη, αυτό που κάνουμε είναι απλά ελέγξτε αν έχετε ADENA και το ελάχιστο επίπεδο

 

Μετά την εν λόγω κώδικα πρέπει να βάλετε τα buffs σε αυτή τη μορφή

Κωδικός:

αν εκδήλωση == "2": πρέπει να κάνουν εκκίνηση 2 ΚΑΙ ΠΡΕΠΕΙ ΝΑ RAISING 1 κάθε φορά

st.takeItems (ADENA_ID, 15000) IT ΑΛΛΑΓΗ ΓΙΑ ΤΟ ΒΡΑΒΕΙΟ ΘΕΛΕΤΕ

st.getPlayer (). useMagic (SkillTable.getInstance (). getInfo (4344,3), False, False) να αλλάξει και στα SKILL ID που θέλετε να χρησιμοποιήσετε, να το αλλάξετε ΓΙΑ ΤΟ ΕΠΙΠΕΔΟ ΤΗΣ SKILL

st.getPlayer (). restoreHPMP () εδώ είναι η αποκατάσταση ΠΑΙΚΤΕΣ MP Αιτία NPC ΧΡΗΣΕΙΣ PLAYER MP

επιστροφή "1.htm" ΕΔΩ να επιστρέψετε στην επέλεξε buffs SCREEN

st.setState (ολοκληρώθηκε)

Σημείωση:

για κάθε στιλβωμένο θα πρέπει να θέσει αυτό τον κωδικό, μόλις αλλάξει η ταυτότητα του

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

εκδήλωση == "2")

 

Σε αυτό το κωδικό που σας chosing βοός και το βραβείο, μετά την εν λόγω κώδικα θα πρέπει να επικολλήσετε αυτό το

 

Κωδικός:

αν htmltext! εκδήλωση =:

st.setState (ολοκληρώθηκε)

st.exitQuest (1)

htmltext επιστροφή

 

def onTalk (self, NPC, st):

htmltext = "I dont have something to say you"

st.setState (ξεκινήσει)

επιστροφή InitialHtml

 

QUEST = Quest (QuestId, str (QuestId) + "_" QuestName +, QuestDesc)

CREATED = μέλος ("Start", QUEST)

ΑΡΧΙΣΕΙ = κράτος («Έναρξη», QUEST)

ΟΛΟΚΛΗΡΩΜΕΝΑ = κράτος («Ολοκληρωμένα», QUEST)

 

QUEST.setInitialState (δημιουργία)

για npcId στο NPC:

QUEST.addStartNpc (npcId)

STARTED.addTalkId (npcId)

print "... έγινε"

Δεν θα εξηγήσω εν λόγω κώδικα, απλά επικολλήστε το, δεν υπάρχει τίποτα το ενδιαφέρον

 

Σημείωση: Θυμηθείτε τον αριθμό εκδήλωση κάθε δεξιότητα, ή καλύτερα να γράψουν σε χαρτί ορισμένα

 

Τώρα, αφού έχετε δημιουργήσει το __int__.py θα πρέπει να δημιουργήσετε ένα αρχείο με όνομα 1.html ότι θα είναι η οθόνη επιλογής buffer

 

Μέσα από το 1.html απλά πρέπει να επικολλήσετε αυτόν τον κώδικα (θα εξηγήσω αυτό)

 

Κωδικός:

 

 

 

 

L2 Ranger Buffer

 

 

 

Βοός Λίστα:

 

ΕΔΩ ΒΑΛΤΕ ΤΟ ΚΕΙΜΕΝΟ του κουμπιού, IRECOMMEND σας για να βάλει ΤΟ ΟΝΟΜΑ ΤΟΥ BUFF jeje "δράση =" bypass-h Quest 9999_NPCBuffer 2 "αυτός ο αριθμός είναι πολύ σημαντικό, είναι ΝΕ ΑΡΙΘΜΟΣ ΤΩΝ εκδήλωση που θα ΠΡΟΣΚΛΗΣΗ ΑΠΟ __int__.py width = 75 ύψος = 21 πίσω = "L2UI_ch3.Btn1_normalOn" προσκήνιο = "L2UI_ch3.Btn1_normal">

 

 

 

 

 

Πληρωμή

πολλά attemption σε αυτό τον κωδικό και να θυμόμαστε τον αριθμό μετά

999_NPCBuffer είναι πολύ σημαντικό, να ζητήσει τη σωστή εκδήλωση, για να προσθέσετε

άλλο buff απλά προσθέστε αυτή τη γραμμή στον κώδικα

Κωδικός:

 

 

Απλά αλλάξετε τον αριθμό του γεγονότος και το κουμπί αξία

 

Για το τελευταίο βήμα απλά πρέπει να προσθέσετε αυτή τη γραμμή κώδικα μέσα στο

__int__.py ότι είναι μέσα στο φάκελο gameserver \ στοιχείων \ \ JScript έθιμο \

Κωδικός:

'9999_NPCBuffer »,

ΒΗΜΑ ΤΕΤΑΡΤΟ:. ΔΟΚΙΜΕΣ ΤΟ ΡΥΘΜΙΣΤΙΚΟ

 

Εισάγετε το παιχνίδι και τώρα είδος / / γόνος "ID του Εθνικού Λαϊκού Κογκρέσου σας"

αν NPC Buffer σας λειτουργεί σωστά τότε θα το έκανε καλά, αν όχι, απλά

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

 

 

 

Posted

Ρε φίλε το καλό πόστ που το είδες?

Google Translator και στο τραπέζι σας είναι...

"Εισάγετε το παιχνίδι και τώρα είδος / / γόνος "ID του Εθνικού Λαϊκού Κογκρέσου σας" "

Το λές καθημερινά?

Τέσπα είναι μεταφρασμένο απο guide του αγγλικού section..

 

"άσματα, χοροί, buffs ήρωας, ευγένεια "

Τ'ασπασε... :P

 

δώσε credits man...

Posted

Kala molis eida auto to uperoxo guide c/p kai translate apo google eipa auto tha to xrisimopoihsw opws dipote...Sugnwmh filaraki kalo htan to guide alla kalutera na to afines sta agglika gt me auta pou leei den bgazeis akrh kai agglika na mhn hxeres kalutera tha to egrafes monos sou ......Kala na pernas:)

Guest
This topic is now closed to further replies.


  • Posts

    • Verify if following is supposed to be the way to handle movement npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(point.getX(), point.getY(), point.getZ())); For me, it's not enough. And if it's the case, whole AI system is probably buggy.
    • hello, i want to wtt my charracter in l2elmorelab 1x harbor for 1.5kkk adena in l2reborn 10x new. Or if you interested tell me your offer. :)) Clean Mail 30 lvl Cleric Naked   Updated.
    • package ai.npc.NFWalker; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import l2r.gameserver.enums.CtrlIntention; import l2r.gameserver.model.Location; import l2r.gameserver.model.actor.L2Npc; import l2r.gameserver.model.quest.Quest; import l2r.gameserver.network.clientpackets.Say2; import l2r.gameserver.network.serverpackets.NpcSay; public class NFWalkerAI extends Quest { private static final int WALKER_NPC_ID = 20116; private final Map<String, Route> routes = new HashMap<>(); private final Map<Integer, Integer> npcIndexes = new HashMap<>(); private final Map<Integer, Boolean> npcReverse = new HashMap<>(); private final Map<Integer, String> npcCurrentRoute = new HashMap<>(); public NFWalkerAI() { super(-1, NFWalkerAI.class.getSimpleName(), "ai/npc/NFWalker"); loadRoutes(); addSpawnId(WALKER_NPC_ID); } private void loadRoutes() { // Route 1 Data Route route1 = new Route("route1"); route1.addPoint(new RoutePoint(0, 149363, 172341, -941, 0, false, "")); route1.addPoint(new RoutePoint(1, 148568, 172328, -980, 5, true, "Puff")); route1.addPoint(new RoutePoint(2, 148536, 172792, -980, 0, false, "")); // Route 2 Data Route route2 = new Route("route2"); route2.addPoint(new RoutePoint(0, 149363, 172341, -941, 0, false, "")); route2.addPoint(new RoutePoint(1, 150248, 172328, -980, 5, true, "Rise my children! Bring me the servants of the god! Let them be offered to our god Bifrons!")); route2.addPoint(new RoutePoint(2, 150248, 172776, -980, 0, false, "")); // Add routes to the map routes.put("route1", route1); routes.put("route2", route2); } @Override public String onSpawn(L2Npc npc) { if (npc.getId() == WALKER_NPC_ID) { selectInitialRouteForNpc(npc); } return super.onSpawn(npc); } @Override public String onAdvEvent(String event, L2Npc npc, l2r.gameserver.model.actor.instance.L2PcInstance player) { if (event.equalsIgnoreCase("move")) { moveNpc(npc); } else if (event.equalsIgnoreCase("check_reached")) { checkIfReached(npc); } return null; } private void moveNpc(L2Npc npc) { String routeName = npcCurrentRoute.get(npc.getObjectId()); Route route = routes.get(routeName); Integer pointIndex = npcIndexes.get(npc.getObjectId()); if (route != null && pointIndex != null) { RoutePoint point = route.getPoints().get(pointIndex); if (point.isRun()) { npc.setRunning(); } else { npc.setWalking(); } if (!point.getChat().isEmpty()) { npc.broadcastPacket(new NpcSay(npc.getObjectId(), Say2.NPC_ALL, npc.getId(), point.getChat())); } npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(point.getX(), point.getY(), point.getZ())); // Log movement intention System.out.println("NPC " + npc.getObjectId() + " moving to " + point.getX() + ", " + point.getY() + ", " + point.getZ()); // Schedule a check to see if the NPC has reached its destination startQuestTimer("check_reached", 1000, npc, null); } } private void checkIfReached(L2Npc npc) { String routeName = npcCurrentRoute.get(npc.getObjectId()); Route route = routes.get(routeName); Integer pointIndex = npcIndexes.get(npc.getObjectId()); if (route != null && pointIndex != null) { RoutePoint point = route.getPoints().get(pointIndex); Location currentLocation = npc.getLocation(); Location targetLocation = new Location(point.getX(), point.getY(), point.getZ()); // Check if the NPC has reached the target location if (currentLocation.equals(targetLocation)) { // Log that the NPC has reached the target System.out.println("NPC " + npc.getObjectId() + " reached target " + targetLocation); // Schedule the next movement startQuestTimer("move", point.getDelay() * 1000, npc, null); if (!npcReverse.get(npc.getObjectId())) { pointIndex++; if (pointIndex >= route.getPoints().size()) { npcReverse.put(npc.getObjectId(), true); pointIndex = route.getPoints().size() - 1; } } else { pointIndex--; if (pointIndex < 0) { npcReverse.put(npc.getObjectId(), false); pointIndex = 0; // Choose a new route after completing the current one in both directions switchRouteForNpc(npc); return; } } npcIndexes.put(npc.getObjectId(), pointIndex); } else { // Check again after 1 second startQuestTimer("check_reached", 1000, npc, null); } } } private void selectInitialRouteForNpc(L2Npc npc) { // Randomly select either route1 or route2 String selectedRouteName = "route" + (new Random().nextInt(2) + 1); npcCurrentRoute.put(npc.getObjectId(), selectedRouteName); npcIndexes.put(npc.getObjectId(), 0); npcReverse.put(npc.getObjectId(), false); startQuestTimer("move", 5000, npc, null); // Log initial route selection System.out.println("NPC " + npc.getObjectId() + " selected initial route " + selectedRouteName); } private void switchRouteForNpc(L2Npc npc) { String currentRoute = npcCurrentRoute.get(npc.getObjectId()); String newRoute = currentRoute.equals("route1") ? "route2" : "route1"; npcCurrentRoute.put(npc.getObjectId(), newRoute); npcIndexes.put(npc.getObjectId(), 0); npcReverse.put(npc.getObjectId(), false); startQuestTimer("move", 5000, npc, null); // Log route switching System.out.println("NPC " + npc.getObjectId() + " switched to route " + newRoute); } private static class Route { private List<RoutePoint> points = new ArrayList<>(); public Route(String name) { } public void addPoint(RoutePoint point) { points.add(point); } public List<RoutePoint> getPoints() { return points; } } private static class RoutePoint { private int id; private int x, y, z, delay; private boolean run; private String chat; public RoutePoint(int id, int x, int y, int z, int delay, boolean run, String chat) { this.id = id; this.x = x; this.y = y; this.z = z; this.delay = delay; this.run = run; this.chat = chat; } public int getId() { return id; } public int getX() { return x; } public int getY() { return y; } public int getZ() { return z; } public int getDelay() { return delay; } public boolean isRun() { return run; } public String getChat() { return chat; } } } I looking for help, with this, the npc not start to move. Im trying to create, an NPC wich have multiple walk routes basic logic is  random pick a route complite the route  like Route 1 start form zero (0 -> 1 -> 2(or more) -> 1 -> 0) When the npc return to 0, the script should pic the other route and start again.  And if there is a message like point 1 here     "route1.addPoint(new RoutePoint(1, 148568, 172328, -980, 5, true, "Puff"));" The npc should display the chat message. Currently my problem is the npc not moving, but if I manage it to start moving its randomly move between the route 1 and 2 set of coordinates. Currently for me its  a nightmare. I hope anyone can help somhow.
    • We are certainly not an ambulance, but we will definitely cure you of blacklists and empty pockets. Live freely with SX! Each of you will receive a trial version of SX to familiarize yourself with the product, all you have to do is post in this thread
  • Topics

×
×
  • Create New...