-
Posts
2,105 -
Credits
0 -
Joined
-
Last visited
-
Days Won
8 -
Feedback
100%
Content Type
Articles
Profiles
Forums
Store
Posts posted by AccessDenied
-
-
It's not that hard you go to community main html and add a link or image that is linked to the gm shop htmls..
-
Bcs you miss imports of those maps? Import them, ctrl+shift+o if it ask choose java.util
No really im not that silly :P its not about normal errrors like missing imports
its like jar is missing or idk what..
even if i mport the list then the next error is the .add(x) doesnt really make sense..
and there are lines that has no error but it says there is error..
or a String is red..
-
Hello for some reason i get these warnings-errors
when i try compile the source L2J (i use java jdk 8)
Everything is almost red even things like strings, arrays, e.t.c
any idea?
no seem normal... since java jdk 8 is installed
-
somebody can share backup file?
I'm literally few days in L2 and i can say stop using shared projects especially Russian one.. nothing wrong with russian i like them but
their work is a bit messy and hard to re-work on.. use clean L2j files and do your own "personal project" for your server...
Everywhere i see this fandC and im sure there is no difference with L2J if you fix few things...
-
L2GrandBossInstance.java
/* * L2jFrozen Project - www.l2jfrozen.com * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. */ package com.l2jfrozen.gameserver.model.actor.instance; import com.l2jfrozen.Config; import com.l2jfrozen.gameserver.managers.GrandBossManager; import com.l2jfrozen.gameserver.managers.RaidBossPointsManager; import com.l2jfrozen.gameserver.model.L2Character; import com.l2jfrozen.gameserver.model.L2Summon; import com.l2jfrozen.gameserver.model.spawn.L2Spawn; import com.l2jfrozen.gameserver.network.SystemMessageId; import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage; import com.l2jfrozen.gameserver.templates.L2NpcTemplate; import com.l2jfrozen.gameserver.thread.ThreadPoolManager; import com.l2jfrozen.util.random.Rnd; /** * This class manages all Grand Bosses. * @version $Revision: 1.0.0.0 $ $Date: 2006/06/16 $ */ public final class L2GrandBossInstance extends L2MonsterInstance { private static final int BOSS_MAINTENANCE_INTERVAL = 20000; /** * Constructor for L2GrandBossInstance. This represent all grandbosses. * @param objectId ID of the instance * @param template L2NpcTemplate of the instance */ public L2GrandBossInstance(final int objectId, final L2NpcTemplate template) { super(objectId, template); } @Override protected int getMaintenanceInterval() { return BOSS_MAINTENANCE_INTERVAL; } @Override public boolean doDie(final L2Character killer) { if (!super.doDie(killer)) return false; L2PcInstance player = null; if (killer instanceof L2PcInstance) player = (L2PcInstance) killer; else if (killer instanceof L2Summon) player = ((L2Summon) killer).getOwner(); if (player != null) { SystemMessage msg = new SystemMessage(SystemMessageId.RAID_WAS_SUCCESSFUL); broadcastPacket(msg); msg = null; if (player.getParty() != null) { for (final L2PcInstance member : player.getParty().getPartyMembers()) { RaidBossPointsManager.addPoints(member, getNpcId(), (getLevel() / 2) + Rnd.get(-5, 5)); } } else RaidBossPointsManager.addPoints(player, getNpcId(), (getLevel() / 2) + Rnd.get(-5, 5)); } return true; } @Override public void onSpawn() { super.onSpawn(); if (!this.getSpawn().is_customBossInstance()) GrandBossManager.getInstance().addBoss(this); } @Override protected void manageMinions() { _minionList.spawnMinions(); _minionMaintainTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Runnable() { @Override public void run() { // Teleport raid boss home if it's too far from home location final L2Spawn bossSpawn = getSpawn(); int rb_lock_range = Config.RBLOCKRAGE; if (Config.RBS_SPECIFIC_LOCK_RAGE.get(bossSpawn.getNpcid()) != null) { rb_lock_range = Config.RBS_SPECIFIC_LOCK_RAGE.get(bossSpawn.getNpcid()); } if (rb_lock_range >= 100 && !isInsideRadius(bossSpawn.getLocx(), bossSpawn.getLocy(), bossSpawn.getLocz(), rb_lock_range, true, false)) { teleToLocation(bossSpawn.getLocx(), bossSpawn.getLocy(), bossSpawn.getLocz(), true); // healFull(); // Prevents minor exploiting with it } _minionList.maintainMinions(); } }, 60000, getMaintenanceInterval()); } @Override public boolean isRaid() { return true; } public void healFull() { super.setCurrentHp(super.getMaxHp()); super.setCurrentMp(super.getMaxMp()); } }
I don't get this, it should extends L2NpcInstance no L2MonsterInstance normaly in the code we could see
@override
public onByPassFeedback
but in this code i dont see anything like this.
Why you just dont google and find 1 grandboss manager? its really easy Npc.. this seem really wrong..
Well here an example
public class L2GrandBossManagerInstance extends L2Npc { private static final int[] BOSSES = { 29001, 29006, 29014, 29019, 29020, 29022, 29028, 29045 }; public L2GrandBossManagerInstance(int objectId, L2NpcTemplate template) { super(objectId, template); } @Override public void onAction(L2PcInstance player) { if (!canTarget(player)) { return; } if (this != player.getTarget()) { player.setTarget(this); player.sendPacket(new MyTargetSelected(getObjectId(), 0)); player.sendPacket(new ValidateLocation(this)); } else if (!canInteract(player)) { player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this); } else { showHtmlWindow(player); } player.sendPacket(new ActionFailed()); } private void showHtmlWindow(L2PcInstance activeChar) { showRbInfo(activeChar); activeChar.sendPacket(new ActionFailed()); } private final void showRbInfo(L2PcInstance player) { NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); TextBuilder tb = new TextBuilder(); tb.append("<html><title>Chat</title><body><br>"); tb.append("<br>"); tb.append("<font color=0174DF>Grand Boss Info:</font>"); tb.append("<center>"); tb.append("<img src=L2UI.SquareWhite width=280 height=1><br>"); tb.append("</center>"); tb.append("<br>"); tb.append("<center>"); tb.append("<table width = 280>"); for(int boss : BOSSES ) { String name = NpcTable.getInstance().getTemplate(boss).getName(); long delay = GrandBossManager.getInstance().getStatsSet(boss).getLong("respawn_time"); if (delay <= System.currentTimeMillis()) { tb.append("<tr>"); tb.append("<td><font color=\"FA5858\">" + name + "</color>:</td> " + "<td><font color=\"00BFFF\">Is Alive</color></td>"+"<br1>"); tb.append("</tr>"); } else { int hours = (int) ((delay - System.currentTimeMillis()) / 1000 / 60 / 60); int mins = (int) (((delay - (hours * 60 * 60 * 1000)) - System.currentTimeMillis()) / 1000 / 60); int seconts = (int) (((delay - ((hours * 60 * 60 * 1000) + (mins * 60 * 1000))) - System.currentTimeMillis()) / 1000); tb.append("<tr>"); tb.append("<td><font color=\"FA5858\">" + name + "</color></td>" + "<td><font color=\"00BFFF\">" +" " + "Respawn in :</color></td>" + " " + "<td><font color=\"00BFFF\">" + hours + " : " + mins + " : " + seconts + "</color></td><br1>"); tb.append("</tr>"); } } tb.append("</table>"); tb.append("</center>"); tb.append("<br><center>"); tb.append("<br><img src=L2UI.SquareWhite width=280 height=1><br>"); tb.append("<td><button value=\"Back\" action=\"bypass -h npc_%objectId%_Chat_service/services.htm\" width=134 height=21 back=\"L2UI_ch3.BigButton3_over\" fore=\"L2UI_ch3.BigButton3\"></td>"); tb.append("</center>"); tb.append("</body></html>"); html.setHtml(tb.toString()); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); } }
Try this and report. Also you can change the private static final int[] BOSSES =
into an int Array[] configuration and seperate them with , so you can add config of what bosses you want
and no need compile every time...
-
I dont understand why this obsession with fandC.. im new but still i believe if you're good developer you can even make miracles with
L2j basic files.
-
Packets are a way to handle the information transfered from server -> client and client -> server. For example, let's say you press F3 and you request to cast a skill. The client sends this request to the server (RequestMagicSkillUse). The server makes all the necessary checks to see if this is possible (the casting of the specific skill), like check if the player has this skill, if the target is invalid etc. Then, if all the checks are passed, the server sends to the client AND the clients near the client a packet to start the animation and effects of the skill (the damage and effects are calculated in the server and not in the client) (MagicSkillUse).
This is a simple (and not complete I didn't include every packet) communication between the server and the client in order to handle the casting of a skill.
Now the writeD, writeS etc stuff you see in the server packets, is the information the client expects to receive from the server, in the specific order. You cannot add more information (actually I think you can but nothing will happen) because the client is not prepared to use this information. For example, the MagicSkillUse packet sends this information: writeC(0x48) - This is the opcode of the packet if I am not mistaken, an identifier of the packet so the client knows what information it is receiving, writeD(_charObjId) - The id of the player casting this skill, so that the animations play on the correct entity (player), writeD(_targetId) - The id of the target that the player is casting the skill on, so that the effects are shown on the correct entity (player), writeD(_skillId) - The id of the skill the player is casting, so that the correct animations and effects are shown, writeD(_skillLvl) - I am not sure why would the client need that, but it is the level of the skill, writeD(_hitTime) - The amount of time the player will be casting this skill for before it finishes, this is used to time the steps in the animation I guess, so that it is not too fast or too slow and it corresponds the players casting/attack speed, etc etc...
This is just a very basic explanation of how the communication and the data transfer works, I hope it helped.
ah i see, okey i got it somehow
So every file like RequestBypassToServer read specific packets sended by client
and the method that does this job is the
protected void readImpl()
{
}
which is override actualy so declared to the parent class.
Still the opacity of it is low like 30% but i start get it even if i cant adjust or do anything yet cause i lack in knowledge
-
It's basic (by this, I mean pretty much direct) application of EDA (Event Driven Architecture).
Server is responsible for presenting the dynamic state of the world to the client (the player's character data, including location, equipment, pledge, etc.), other player characters, npc data, and so on and so on. Server does this all the time without any client involvement.
Client is responsible for issuing very specific requests to the server. Target selection, movement, item use, or simpler requests, such as 'leave my pledge' or 'show my item list' contain the bare minimum data for the server to understand what the user wants to do.
Target selection will depend on what world objects the server has supplied to the client. Therefore, client will send a target request with an object's identifier (note: in reality, there is no target request, there are action/attack requests, first invocation of each is assumed to be the target selection request, and all further - follow[PC] or interact[NPC]/attack requests, therefore additional information is sent, e.g. SHIFT state (interact/attack without moving towards)).
Movement request is filled in with client-side data about the target point XYZ.
Item use is similar as target selection.
Leave my pledge or show my item list requests require no additional data, thus they are implemented as a packet with a designated opcode and no other data to be transferred.
That's how things work at the very essentials. As far as implementation is concerned, there are various ways to implement it, most popular designs being session=thread, socket multiplexing and (more CPU intensive for higher peak throughput) non-blocking socket multiplexing.
Well yes i noticed, right now i'm running Lineage 2 without server so it can run without any server required, but afcourse you cant
talk to npc's or do things like equip armor e.t.c.
I noticed that. Maybe can you be a bit more specific and give me an example like lets say something like handlers in datapack
or more specific the keys that you press like control to attack that server read as _forceControl.
Thanks
-
You can always take a look at NetPro. Of course, the C5 and IL packets I didn't had a chance to take care of, as Underground arrived, and I was sidetracked to move the application to JavaFX due to certain JVM argument issues with Swing, but you can find complete C4 packet structures in it. For example, C4 CharInfo
MOREOVER, you can use the [menu bar] -> Packets -> Explain… function to see how a specific byte array will look to the C4 client.
Additionally, here's a list of all C4 packet opcodes.
And a quick overview:
<byte> is equivalent to readC (client packets) writeC (server packets)
<word> is equivalent to readH (client packets) writeH (server packets)
<dword> is equivalent to readD (client packets) writeD (server packets)
<qword> is equivalent to readQ (client packets) writeQ (server packets)
<double> is equivalent to readF (client packets) writeF (server packets)
<string> is equivalent to readS (client packets) writeS (server packets)
Thanks for that, i am more interest in understand how a texture how a model in other words the client communicate with a server and controlled using these packets
than just code in server side without know how handlers work behind the scene.
I used to do some gaming develop such as Unreal and i am still up to but again even if you work on it it doesnt really make you understand how client work with the code part, where they meet. I always liked to dig inside things and know how they work even if for now still this does not make big sense to make.
Well thanks again for the informations, helps a bit.
-
How to create a custom Pet / Summon without any bug?
1st step : we find an official summon that exist`s in game , we copy paste his stats skill bla bla and server side and java side
2 step : we replace his animation with new one , we done simple and fast,
( it a was long time ago that i create a custom , so u can change also a summon like Mew the cat ( uselles) and change just the animations at client side )
i hope i help u, have fun,
Hello ms pamela32, i dont only want to copy i want make a new one and i actualy want make a "semi-custom" system
no like pet i just copy to use pet as template and ill learn a bit (work on it) and make a better system
Thanks for information though
-
I made it work <3 it spawn normaly, imma test it. Tryskellll it workkkkkkkkkkkkkkkksssssss :33333333333333 me happy :P
-
It's way beyond your own knowledge. It's not a specific file to edit, it's the whole sources to edit, most notably all packets opcodes and packets structure (simply to make it working). You got features to delete and datapack to edit.
About scripts I didn't get it. It's up to scripts engine to do the work, on aCis we reworked it to handle scripts on core, but most packs load them from dp. And you have to edit all files, or adapt the script engine + Quest class (which leads the behavior of any quest and script). Which isn't even related to chronicle downgrade.
There isn't a magical file where you edit a number and it edits your source from IL to C3. It's similar to create a .txt and rename it ClickMeToEarn10000Euros.exe. It won't work.
Thank you, yes you're right that is beyond my knowledge but so far whatever i learned i did it alone by searching
-Php, ajax, Aion (java), l2j (currently)
so is not bad to dig a bit inside to check also the way that client-server communicate. thanks again Tryskel ill search it alone
-
Also sweets here a proof that none L2Pet works i checked all default pets
None spawn .. whatever extends L2Pet doesnt spawn so maybe the L2PetInstance is not for spawn
-
MMOCore reads it, each packet got a goal and particular infos and/or checks. It's the way client and server communicates and share informations.
So i understood but in more practical way when you have a free source lets say from Joey (L2java)
which has scripts in different project (Datapack) and core into another (Core)
is there a file that does those checks.
I want try in other words manualy downgrade a X chronicle to another or upgrade it.
I don't care which chronicle will be i just want to see it happen, so this mean i dont care for codes, quests or whatever it has inside.
With a search i did i saw people asking this but their answers were kinda no finished like "use wireshark to check what clients sends e.t.c"
which is not helpful.
Again im asking the practical way so i can do it, the file maybe that does this or a bit more info.
Thanks
-
As you said above "target no found". That means the npc doesn't exist. You try to summon existing npc or "custom"? Npc seems the problem.
Dont think saw as i read the source the lineage 2 has 2 options or to load sql from npc or if config is activated from custom_npc
as far as i tested spawns that extends L2Npc or other Instance it works
L2Pet Instance doesnt work.. my npc is inside custom_npc (yes is True in config) and its the only one that doesnt spawn everything else work fine.
-
L2 uses particular protocols, depending generally about chronicle, but not only (Interlude client got few internal updates, and so different clients with different protocols).
If packets definition have been edited meanwhile by NCSoft, you have to care about the changes (which can go to new packets, different opcode for packet, or packet structure edition).
It goes generally in a single way : addition of a packet, packets reorganization and addition of features on existing packet. It's pretty rare than an existing packet becomes unused later on.
So for example, from C3 to C4, since new features come, you got for example addition of augmentation information on item related packet, on inventory, etc. When they introduced CP system, they had to edit existing packets to handle CP bar information.
Etc etc. About why they edit opcodes, I don't know. Probably reorganization, no clue.
Using an outdated client can lead to different fails, invalid/not good packet sent (like you want to send login packet but ends on clan related ones because opcode has been edited meanwhile).
Alright, thanks for the introduce but about the part of downgrade or upgrade lets say i want to make a server
from C6 to c4 what exactly i have to edit (what i touch) to adjust these packets?
Also then these packets are the lines i saw ReadD(); andcouldnt understand what it is
Example lets say we work on PHP and you ask me "how it works when i click the Login button" i tell you it does this and this
but you're actualy interest in the behind part to create this *.php file with the checks and redirect to a site.
-
Tk means to put some log, like the log on gs or even a player.sendMessage(" "); in the middle of the code, to see if it's executed :P
No need i already mention that if i have a pet and i click on my item it says " you already have a pet" so this mean it use the handler and it execute until the last line
by the way thanks for the friendly answers, i come from Aion community and lineage 2 is working different.
Thanks tryskel and sweets
-
Does the npc work correctly, spawning it manually ?
Put some logs on SummonItems handler to see exactly what happen, and where the code blocks.
The npc is inside custom_npc
11106 18544 Elf 1 Elf 1 Monster2.inferno_drake_100_bi 20 20 50 etc L2Pet 40 40.000000000000000 40.000000000000000 40.000000000000000 40.000000000000000 40 40 40 40 40 40 40 40 40 40 40 40 40 40 0 40 0 0 0 60 120 1 1 0 0but because is L2Pet instance i cant spawn it.. it says "target not found"also i have no log for handles in _log_ folder.. -
Hello i just want to ask an information from experienced members.
When we say in a game "change packets" lets say we have a game that its version is 2.0
but then a client come with 3.0 version so we need change our server Packets to version 3.0
what does it mean?
I'm not familiar with it so if someone could give a nice explanation i would appreciate.
Thanks a lot!
-
You have to feed npcId on SummonItem, which normally is the goal of the .csv.
Do you have npc data 11106 too ? And avoid to use ids higher than 65536.
I did as i said at csv
4) summon_items.csv line
### Elf Summon ###77714;11106;1and when u say npc_data you mean npcaidata? if not yes i added the npc 11106 at custom_npc and it extends L2Pet class -
Nowhere, on both item or skill, you got a npcId. So how it is supposed to know which npcId to call, it's a mystery.
pet_collar can also create trouble if linked to specific pets (wolves). I only guess.
----
I know dwarves females are supposed to get beard, but it's only a FANTASY. And even if it was true, my beard would be red like my hair, not white.
yes but i copied the one from wolf collar.. how wolf collar works then ? without npc id..
-
Without any bug report or code, don't expect to get answers. I'm not Gandalf.
I'm pretty sure i saw you in lord of the rings dont lie to me -.-
-
I readed line by like the SummonHandler and anything relative to summon to understand and so far all these are used and needed..
but i dont know what else i miss
Also i added the item in system and the skill maybe the system need a Pet Line in some file?
Like maybe it has something like PetGrp.dat? i cant see anything like that
-
Without any bug report or code, don't expect to get answers. I'm not Gandalf.
There is no error or anything but sure let me post my things
1) My Pet_Data.xml
<pet id="11106" index="1"> <set name="food" val="2515" /> <set name="hungry_limit" val="55" /> <set name="load" val="54510" /> <stats> <stat level="1"> <set name="max_meal" val="248" /> <set name="exp" val="0" /> <set name="get_exp_type" val="73" /> <set name="consume_meal_in_battle" val="2" /> <set name="consume_meal_in_normal" val="2" /> <set name="org_pattack" val="2.11864406779661" /> <set name="org_pdefend" val="11.1111111111111" /> <set name="org_mattack" val="1.44675925925926" /> <set name="org_mdefend" val="8.13062889692864" /> <set name="org_hp" val="24.8725961538461" /> <set name="org_mp" val="20" /> <set name="org_hp_regen" val="55" /> <set name="org_mp_regen" val="0.9" /> <set name="soulshot_count" val="1" /> <set name="spiritshot_count" val="1" /> </stat> </stats> </pet>
2) My Custom Item for call the summon
<item id="77714" type="EtcItem" name="Custom Summon Elf">
<set name="icon" val="icon.etc_prefect_belt_i00" /><set name="default_action" val="skill_maintain" /><set name="etcitem_type" val="pet_collar" /><set name="material" val="leather" /><set name="weight" val="10" /><set name="is_oly_restricted" val="true" /><set name="handler" val="SummonItems" /><set name="item_skill" val="11106-1" /><set name="use_condition" val="{{uc_transmode_exclude;{tt_flying;tt_pure_stat}}}" /></item>3) My Custom skill that item use
<skill id="11106" levels="1" name="Wolf's Necklace">
<set name="target" val="TARGET_SELF" /><set name="hitTime" val="5000" /><set name="staticHitTime" val="true" /><set name="skillType" val="COREDONE" /><set name="isMagic" val="true" /><set name="operateType" val="OP_ACTIVE" /></skill>4) summon_items.csv line
### Elf Summon ###77714;11106;1
Quest Bug
in Request Server Development Help [L2J]
Posted
The method
Looks fine to me no mistakes.
Maybe is visual bug? Maybe updateInventory..
After you finish quest try log out and then login again and check if you still have the items.
maybe the destroyItemByItemId miss a updateInventory or idk.