Jump to content

AccessDenied

Banned
  • Posts

    2,105
  • Credits

  • Joined

  • Last visited

  • Days Won

    8
  • Feedback

    100%

Posts posted by AccessDenied

  1. Quest.java

     

    Here I leave the quest.java that I use.

     

    http://pastebin.com/qAL42YCL

    The method 

     

     

     

    1. public boolean takeItems(L2PcInstance player, int itemId, long amount)
    2.         {
    3.                 // Get object item from player's inventory list
    4.                 L2ItemInstance item = player.getInventory().getItemByItemId(itemId);
    5.                 if (item == null)
    6.                 {
    7.                         return false;
    8.                 }
    9.                
    10.                 // Tests on count value in order not to have negative value
    11.                 if ((amount < 0) || (amount > item.getCount()))
    12.                 {
    13.                         amount = item.getCount();
    14.                 }
    15.                
    16.                 // Destroy the quantity of items wanted
    17.                 if (item.isEquipped())
    18.                 {
    19.                         L2ItemInstance[] unequiped = player.getInventory().unEquipItemInBodySlotAndRecord(item.getItem().getBodyPart());
    20.                         InventoryUpdate iu = new InventoryUpdate();
    21.                         for (L2ItemInstance itm : unequiped)
    22.                         {
    23.                                 iu.addModifiedItem(itm);
    24.                         }
    25.                         player.sendPacket(iu);
    26.                         player.broadcastUserInfo();
    27.                 }
    28.                 return player.destroyItemByItemId("Quest", itemId, amount, player, true);
    29.         }

     

    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.

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

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

  4.  

     
     

     

     

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

  5. 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 bas​ic 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

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

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

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

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

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

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

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

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

  14. 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 0
     
     
    but because is L2Pet instance     i cant spawn it.. it says "target not found"
     
    also i have no log for handles in _log_ folder..
  15. 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!

  16. 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;1
     
    and when u say npc_data    you mean npcaidata? if not yes i added the npc  11106   at custom_npc and it extends L2Pet class
  17. 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.. 

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

  19. 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
×
×
  • Create New...