Jump to content

Recommended Posts

  • 3 months later...
Posted

I do not know whether the error is in the java or html, because when I click on the npc it appears the code of html example% pvplist%, but if you click on the PK it will be normal nicknames of the players, but you clicking again in PVP, appears normal, the only problem yourself and when you first click on the npc.

 

 

- obs: sorry for my english because I am using translator.

Posted (edited)

i am using same code on my server (nothing less, nothing more) and it works within latest revision of acis.

 

- have you changed anything (.htm, java source)?

- which pack are you using (+rev)?

 

... seriously, i need more details.

Edited by Caparso
Posted

I do not know whether the error is in the java or html, because when I click on the npc it appears the code of html example% pvplist%, but if you click on the PK it will be normal nicknames of the players, but you clicking again in PVP, appears normal, the only problem yourself and when you first click on the npc.

 

 

- obs: sorry for my english because I am using translator.

Try to re-add this code.

It's working and for me for aCis last rev..

Posted (edited)
Did not edit any html, the boy ai forum adapted to correct frozen? I picked up the code and added correctly.

 

Follow the links of the images below:

When I click on the npc:


 

When click the pk:


 

When click the online:


 

 

-> When I click the back pk and click the pvp it shows:


 

 

Good bug it is only when you click the NPC which is the first picture I sent. Good've tried to think about it but got no success, then saw topic ask the owner if you have any solution? If you have please let me know

Edited by mxteu
Posted

so, its frozen?

probably missing: onFirstTalk, but i can't tell you more since no longer working on frozen source. just research other instances, then copy analogously missing part of code :)

Posted

my project is not stopped, and as a basis of greatly improved frozen in terms of mods, bugs, and balancing himself, so I'm saying, is missing something in the mod, but not from me but yours.But it did work properly, it is not everyone who uses one acis of life, but there are people who have the intelligence to do a much better design  O0

Posted (edited)

maybe l2jfrozen have lot of customs/mods already implemented, but mechanical part of server is a crap (problems with targeting or changing target, stucking characters and overall problems with movement etc.). if you want good balance probably best option is to run with l2jserver, but <if you ask me> there's no other interlude server emulator worthy to work within - except l2jacis.

 

ps. hiding inappropriate behaviors of mechanical part of the game under visually impressive customs become very popular nowadays, unfortunatelly ...

Edited by Caparso
  • 4 months later...
Posted (edited)

There's a single JOIN over the whole L2J source, so...

I thought there was none

 

For the record and if someone wants to use this with a proper sql part,

this should be your statement.

select toppvp.char_name as toppvp_charname, toppvp.pvpkills as toppvp_kills, toppvp.online as toppvp_online, 
toppk.char_name as toppk_charname, toppk.pkkills as toppk_kills, toppk.online as toppk_online, 
toponline.char_name as toponline_charname, toponline.onlinetime as toponline_onlinetime, toponline.pvpkills as toppvp_online from characters chars
inner join characters toppvp on chars.obj_id=toppvp.obj_id
inner join characters toppk on chars.obj_id=toppk.obj_id
inner join characters toponline on chars.obj_id=toponline.obj_id
ORDER BY toppvp.pvpkills DESC, toppk.pkkills DESC, toponline.onlinetimde DESC, toppvp.char_name ASC LIMIT 10, toppk.char_name ASC LIMIT 10, toponline.char_name ASC LIMIT 10

Edited by .Elfocrash
Posted
 
this where it goes
 
create new npc with our dedicated type or use the one below:
    <npc id="50012" idTemplate="31549" name="STATISTICS WALL" title="L2EUPHORIA.COM">
        <set name="level" val="70"/>
        <set name="radius" val="32"/>
        <set name="height" val="46.5"/>
        <set name="rHand" val="0"/>
        <set name="lHand" val="0"/>
        <set name="type" val="L2Status"/>
        <set name="exp" val="0"/>
        <set name="sp" val="0"/>
        <set name="hp" val="2444.46819"/>
        <set name="mp" val="1345.8"/>
        <set name="hpRegen" val="7.5"/>
        <set name="mpRegen" val="2.7"/>
        <set name="pAtk" val="688.86373"/>
        <set name="pDef" val="295.91597"/>
        <set name="mAtk" val="470.40463"/>
        <set name="mDef" val="216.53847"/>
        <set name="crit" val="4"/>
        <set name="atkSpd" val="253"/>
        <set name="str" val="40"/>
        <set name="int" val="21"/>
        <set name="dex" val="30"/>
        <set name="wit" val="20"/>
        <set name="con" val="43"/>
        <set name="men" val="20"/>
        <set name="corpseTime" val="7"/>
        <set name="walkSpd" val="50"/>
        <set name="runSpd" val="120"/>
        <set name="dropHerbGroup" val="0"/>
        <set name="attackRange" val="40"/>
        <ai type="default" ssCount="0" ssRate="0" spsCount="0" spsRate="0" aggro="0" canMove="true" seedable="false"/>
    </npc>
  • 3 weeks later...
Posted

proudly presents probably first custom npc, that has been designed and developed together with my good friend. custom npc shows ranking of top players with the best score in three basic categories (TOP PVP, TOP PK, TOP ONLINE). lists refreshes automaticaly every x minutes and generates y players in the ranking table. variables are fully customizable and configurable, but never tested with none-default values. to successfully implement npc just follow three simple steps.

 

preview: http://s29.postimg.org/bxq590bj9/ranking_npc.gif

 

first you have to create new file in proper package (gameserver/model/actor/instance/),

name: L2StatusInstance.java

/*
 * 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 2, 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 *
 * http://www.gnu.org/copyleft/gpl.html
 */
package net.sf.l2j.gameserver.model.actor.instance;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.StringTokenizer;
import java.util.logging.Level;

import net.sf.l2j.L2DatabaseFactory;
import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.cache.HtmCache;
import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;

public class L2StatusInstance extends L2NpcInstance
    {
    
    private class PlayerInfo
        {
        public PlayerInfo(int pos,String n, int pvps, int pks ,int ontime, Boolean iso)
            {
            position = pos;
            Nick = n;
            pvpCount = pvps;
            pkCount = pks;
            onlineTime = ontime;
            isOnline = iso;
            }
        
        public int position;
        public String Nick;
        public int pvpCount;
        public int pkCount;
        public int onlineTime;
        public Boolean isOnline;
        }
    
    //delay interval (in minutes):
    private final int delayForCheck = 5;
    
    //number of players to be listed
    private int pvpListCount = 10;
    private int pkListCount = 10;
    private int onlineListCount = 10;

    
    private PlayerInfo [] topPvPList = new PlayerInfo [pvpListCount];
    private PlayerInfo [] topPkList = new PlayerInfo [pkListCount];
    private PlayerInfo [] topOnlineList = new PlayerInfo [onlineListCount];
    
    
    public L2StatusInstance(int objectId, NpcTemplate template)
        {
        super(objectId, template);
        ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new RefreshAllLists(), 10000, delayForCheck * 60000);
        }
        
    private class RefreshAllLists implements Runnable
        {
        public void run()
            {
            ReloadData();
            }
        }
    
    private void ReloadData()
        {
        try (Connection con = L2DatabaseFactory.getInstance().getConnection())
            {
            PreparedStatement statement = con.prepareStatement("SELECT char_name, pvpkills, online FROM characters ORDER BY pvpkills DESC, char_name ASC LIMIT 10");
            ResultSet result = statement.executeQuery();
            
            //refreshing top pvp list
            int i = 0; //index of array
            
            while (result.next())
                {
                topPvPList[i] = new PlayerInfo(i+1,result.getString("char_name"),result.getInt("pvpkills"),0,0,result.getBoolean("online"));
                i++;
                }
                    
            //refreshing top pk list
            statement = con.prepareStatement("SELECT char_name, pkkills, online FROM characters ORDER BY pkkills DESC, char_name ASC LIMIT 10");
            result = statement.executeQuery();
            
            i = 0; //index of array
            while (result.next())
                {
                topPkList[i] = new PlayerInfo(i+1,result.getString("char_name"),0,result.getInt("pkkills"),0,result.getBoolean("online"));
                i++;
                }
            
            //refreshing top online list
            statement = con.prepareStatement("SELECT char_name, onlinetime, online FROM characters ORDER BY onlinetime DESC, char_name ASC LIMIT 10");
            result = statement.executeQuery();
            
            i = 0; //index of array
            while (result.next())
                {
                topOnlineList[i] = new PlayerInfo(i+1,result.getString("char_name"),0,0,result.getInt("onlinetime"),result.getBoolean("online"));
                i++;
                }
            
            result.close();
            statement.close();
           
            }
        catch (SQLException e)
            {
            _log.log(Level.WARNING, "ranking (status): could not load statistics informations" + e.getMessage(), e);
            }
        }

    @Override
    public void onSpawn()
        {
        ReloadData();
        }

    @Override
     public void showChatWindow(L2PcInstance player)
         {
        GeneratePvPList(player);
         }
    
    @Override
    public void onBypassFeedback(L2PcInstance player, String command)
        {
        StringTokenizer st = new StringTokenizer(command, " ");
        String currentCommand = st.nextToken();
    
        if (currentCommand.startsWith("pvplist"))
            {
            GeneratePvPList(player);
            }

        else if (currentCommand.startsWith("pklist"))
            {
            GeneratePKList(player);
            }
        else if (currentCommand.startsWith("onlinelist"))
            {
            GenerateOnlineList(player);
            }
                
        super.onBypassFeedback(player, command);
        }
    
    private void GeneratePvPList(L2PcInstance p)
        {
        StringBuilder _PVPranking = new StringBuilder();
        for (PlayerInfo player : topPvPList)
            {
            if (player == null) break;

            _PVPranking.append("<table width=\"290\"><tr>");
               _PVPranking.append("<td FIXWIDTH=\"2\" align=\"center\"></td>");        
               _PVPranking.append("<td FIXWIDTH=\"17\" align=\"center\">"+player.position+"</td>");
               _PVPranking.append("<td FIXWIDTH=\"158\" align=\"center\">"+player.Nick+"</td>");
               _PVPranking.append("<td FIXWIDTH=\"90\" align=\"center\">"+player.pvpCount+"</td>");
               _PVPranking.append("<td FIXWIDTH=\"50\" align=\"center\">"+((player.isOnline) ? "<font color=\"00FF00\">ON</font>" : "<font color=\"CC0000\">OFF</font>")+"</td>");
               _PVPranking.append("<td FIXWIDTH=\"2\" align=\"center\"></td>");
               _PVPranking.append("</tr></table>");
               _PVPranking.append("<img src=\"L2UI.Squaregray\" width=\"300\" height=\"1\">");
            }
        
           NpcHtmlMessage html = new NpcHtmlMessage(1);
        html.setFile(getHtmlPath(getNpcId(), 0));
        html.replace("%objectId%", getObjectId());
        html.replace("%pvplist%", _PVPranking.toString());
        p.sendPacket(html);
        }
    
    private void GeneratePKList(L2PcInstance p)
        {
        StringBuilder _PVPranking = new StringBuilder();
        for (PlayerInfo player : topPkList)
            {
            if (player == null) break;
    
               _PVPranking.append("<table width=\"290\"><tr>");
               _PVPranking.append("<td FIXWIDTH=\"2\" align=\"center\"></td>");        
               _PVPranking.append("<td FIXWIDTH=\"17\" align=\"center\">"+player.position+"</td>");
               _PVPranking.append("<td FIXWIDTH=\"158\" align=\"center\">"+player.Nick+"</td>");
               _PVPranking.append("<td FIXWIDTH=\"90\" align=\"center\">"+player.pkCount+"</td>");
               _PVPranking.append("<td FIXWIDTH=\"50\" align=\"center\">"+((player.isOnline) ? "<font color=\"00FF00\">ON</font>" : "<font color=\"CC0000\">OFF</font>")+"</td>");
               _PVPranking.append("<td FIXWIDTH=\"2\" align=\"center\"></td>");
               _PVPranking.append("</tr></table>");
               _PVPranking.append("<img src=\"L2UI.Squaregray\" width=\"300\" height=\"1\">");
            }
        
           NpcHtmlMessage html = new NpcHtmlMessage(1);
        html.setFile(getHtmlPath(getNpcId(), 2));
        html.replace("%objectId%", getObjectId());
        html.replace("%pklist%", _PVPranking.toString());
        p.sendPacket(html);
        }
    
    private void GenerateOnlineList(L2PcInstance p)
        {
        StringBuilder _PVPranking = new StringBuilder();
        for (PlayerInfo player : topOnlineList)
            {
            if (player == null) break;
        
               _PVPranking.append("<table width=\"290\"><tr>");
               _PVPranking.append("<td FIXWIDTH=\"2\" align=\"center\"></td>");        
               _PVPranking.append("<td FIXWIDTH=\"17\" align=\"center\">"+player.position+"</td>");
               _PVPranking.append("<td FIXWIDTH=\"158\" align=\"center\">"+player.Nick+"</td>");
               _PVPranking.append("<td FIXWIDTH=\"90\" align=\"center\">"+ConverTime(player.onlineTime)+"</td>");
               _PVPranking.append("<td FIXWIDTH=\"50\" align=\"center\">"+((player.isOnline) ? "<font color=\"00FF00\">ON</font>" : "<font color=\"CC0000\">OFF</font>")+"</td>");
               _PVPranking.append("<td FIXWIDTH=\"2\" align=\"center\"></td>");
               _PVPranking.append("</tr></table>");
               _PVPranking.append("<img src=\"L2UI.Squaregray\" width=\"300\" height=\"1\">");
            }
        
           NpcHtmlMessage html = new NpcHtmlMessage(1);
        html.setFile(getHtmlPath(getNpcId(), 3));
        html.replace("%objectId%", getObjectId());
        html.replace("%onlinelist%", _PVPranking.toString());
        p.sendPacket(html);
        }
    
    private String ConverTime(long seconds)
        {
        long remainder = seconds;
        int days = (int) remainder / (24*3600);
        remainder = remainder -(days * 3600 * 24);
    
        int hours = (int) (remainder / 3600);
        remainder = remainder -(hours * 3600);
       
        int minutes = (int) (remainder / 60);
        remainder = remainder -(hours * 60);
 
        seconds = remainder;
    
        String timeInText = "";
    
        if (days > 0)
            timeInText = days+"<font color=\"LEVEL\">D</font> ";
        if (hours > 0)
            timeInText = timeInText+ hours+"<font color=\"LEVEL\">H</font> ";
        if (minutes >0)
            timeInText = timeInText+ minutes+"<font color=\"LEVEL\">M</font>";
          
        if (timeInText=="")
            {
            if(seconds>0)
                {
                timeInText = seconds+"<font color=\"LEVEL\">S</font>";
                }
            else
                {
                timeInText = "N/A";
                }
            }
        return timeInText;
        }
    
    @Override
    public String getHtmlPath(int npcId, int val)
        {
        String filename;
        
        if (val == 0)
            filename = "data/html/Status/" + npcId + ".htm";
        else
            filename = "data/html/Status/" + npcId + "-" + val + ".htm";
        
        if (HtmCache.getInstance().isLoadable(filename))
            return filename;
        
        return "data/html/Status/" + npcId + ".htm";
        }
    }
create new npc with our dedicated type or use the one below:

    <npc id="50012" idTemplate="31549" name="STATISTICS WALL" title="L2EUPHORIA.COM">
        <set name="level" val="70"/>
        <set name="radius" val="32"/>
        <set name="height" val="46.5"/>
        <set name="rHand" val="0"/>
        <set name="lHand" val="0"/>
        <set name="type" val="L2Status"/>
        <set name="exp" val="0"/>
        <set name="sp" val="0"/>
        <set name="hp" val="2444.46819"/>
        <set name="mp" val="1345.8"/>
        <set name="hpRegen" val="7.5"/>
        <set name="mpRegen" val="2.7"/>
        <set name="pAtk" val="688.86373"/>
        <set name="pDef" val="295.91597"/>
        <set name="mAtk" val="470.40463"/>
        <set name="mDef" val="216.53847"/>
        <set name="crit" val="4"/>
        <set name="atkSpd" val="253"/>
        <set name="str" val="40"/>
        <set name="int" val="21"/>
        <set name="dex" val="30"/>
        <set name="wit" val="20"/>
        <set name="con" val="43"/>
        <set name="men" val="20"/>
        <set name="corpseTime" val="7"/>
        <set name="walkSpd" val="50"/>
        <set name="runSpd" val="120"/>
        <set name="dropHerbGroup" val="0"/>
        <set name="attackRange" val="40"/>
        <ai type="default" ssCount="0" ssRate="0" spsCount="0" spsRate="0" aggro="0" canMove="true" seedable="false"/>
    </npc>
dowload this archive(contains necessary .htmls) and extract to: gameserver/data/html/.

remember to keep these files in proper folder (Status) and use correct npc type (L2Status).

 

1)Work For me Acis 350.:)  

2:) i have one porblem (see and GMchar in list Top pvp/Top Pk/Top online... How to off GMchar in list?

Guest
This topic is now closed to further replies.



  • Posts

    • sql procedure missed and wrong...fixed it...ZOUMHS 
    • Hello Dexters! https://lineage2dex.com    This is pre-announcing of NEW season server, so we want to share some key points of it. Full details with road map, patch notes we will announce a bit latter Opening September 27 at 19:00 (UTC +3) Open Beta Test from September 23 What’s New This Season?, This is just a short preview of the most exciting changes and updates. A patch note with balance change will be posted later in this thread – one topic with all patchnotes history from 2022 year EXP/SP x25 - Over the past few seasons, our servers were drifting closer to a mid-rate style. And hard to call it now pure PVP server. That’s why we’ve reduced EXP/SP rates from x50 to x25 – making progression smoother, more balanced, and more in line with the mid-rate identity., Improved Olympiad matchmaking – opponents will be matched by strength, making feeding much harder., K/D stats for CC – track your real impact!, New In-Game Shop Interface - no more running to NPCs for supplies – buy everything directly from the interface. NPC Astarte will now only handle services like WH, sales, LS insertion, etc., Balance Adjustments - small but important tweaks for a smoother PvP experience (details in patch notes)., Replica Instance System Reworked - upgrading replicas now requires not only fragments but also real jewellery from B to S grades. You can choose from 3 instance types: PvP Instance – biggest rewards (everyone spawns together for mass PvP)., CC Instance – private instance for your CC., Party Instance – private instance for your party., , Dino Island Returns - back by popular demand: Dark Zone (PvP) and Light Zone (PvE)., Newbie Pass Questline - available at character creation – helps you get familiar with the server and make start progression faster., Clan members taxation system, Full announce - read on forum, https://forum.lineage2dex.com/threads/16723/ (edited)   We’re excited to show you how the Newbie Path will look on the Seasonal Server and share a few details about it. The Newbie Path is designed to help new players on Dex adapt more easily on project. While it won’t reveal the full content of the game, it will greatly assist during the early stages of your journey. But it’s not just for newcomers! Even veteran players will find it useful — completing Newbie Path steps will grant you small progression boosts and extra rewards(exp boosts, some gear, potions etc). Definitely worth using! You’ll be able to test the full Newbie Path system yourself during the Open Beta, launching on September 23rd!
    • 📢 [OFFICIAL ANNOUNCEMENT] 🔥 Lineage 2 Interlude x10 Craft-PvP 🔥 🎮 Grand Opening — September 19 @ 19:00 [UTC +2] 🧪 Open Beta — September 15 @ 19:00 [UTC +2]    🌐 Full server description - https://lineage2.ms/en/wiki 💥 Why Interlude x10 Craft-PvP? ✅ GM Shop up to B-Grade + Full Buffs — get straight to action, no pointless grinding. ✅ Unique Geodata & Geopathfinding Engine — smooth, tactical, and truly next-gen. ✅ Two Client Options — play in Classic or Interlude style. ✅ No Pay-to-Win — donations don’t break the balance. ✅ 1+1 Mode Enabled — max 2 windows, only 1 active = no box armies. ✅ Bot-Free Zone — advanced protection + non-intrusive popup captchas. ✅ No GM Interference — fair, competitive PvP environment. ✅ No Wipes — your progress is safe. ✅ Truly International — global reach, not just CIS players. 🛡 2nd Season. Stronger, Smarter, Updated. 🎯 Pure Craft-PvP. 🌍 Real Competition. 📅 Mark your calendars. Tell your clan. Invite your friends. Let’s make this season legendary. 💪 https://discord.gg/lineage2ms
    • As far as I know, L2Gold stated (unofficially) that closed for legal reasons. Although, my estimation is that it had reached such low popularity (believe me I know, I played till the last day), so they closed it because of that. As for "other" copies or w/e. I believe that everyone has the right to do what they think is best.  I have to say, I find your claims a bit exaggerating. Many servers have done a good job at recreating such a server. There are actually leaked files of C4 L2Gold (L2OFF) so many owners started working from there (L2Gold.cc (old Avellan), L2Gold.in, L2Gold.co etc.) There are other owners that took the idea 1 step further, adapting L2Gold in higher Chronicles and started working on a brand-new style with old features along. @Trance @Brado @To4kA (those are some of the owners that I can think of right now). I think you should re-think your opinions and don't judge them all together. Many of the servers you've mentioned has actually done a decent job and tried to take the brand, one step further. The argument here is that everyone should do what they want. Community will judge if it's good or bad.
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock