Jump to content

Looking For Dev / Make Solo Pvp Zone (Few Edits :o)


Recommended Posts

I believe it's 5 min of coding for someone who knows about how map integers work and what is necessary for OnEnter world and OnExit world


Not sure if someone will be able to help me for free adding what im requesting on the code... ,money OFF!! but if you want to get involved on project ,i will pay soon for future bugs which surely my pack will have


 


This is the multifunction.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 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/>.
*/
/*
* 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.l2jserver.gameserver.model.zone.type;

import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
import java.util.Random;

import javolution.util.FastList;
import javolution.util.FastMap;

import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.datatables.SkillTable;
import com.l2jserver.gameserver.model.L2ItemInstance;
import com.l2jserver.gameserver.model.L2Skill;
import com.l2jserver.gameserver.model.actor.L2Character;
import com.l2jserver.gameserver.model.actor.L2Summon;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
import com.l2jserver.gameserver.model.zone.L2SpawnZone;
import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
import com.l2jserver.util.Rnd;
import com.sun.xml.internal.xsom.impl.scd.Iterators.Map;


/**
*
* @author Wyatt
* @version 1.3
*
*/

public class L2MultiFunctionZone extends L2SpawnZone
{
FastMap<Object, Object> _names = new FastMap<>();
FastMap<Object, Object> _titles = new FastMap<>();

public L2MultiFunctionZone(int id)
{
super(id);
loadConfigs();
}

L2PcInstance activeChar;
Random random = new Random();

public static boolean pvp_enabled, restart_zone, store_zone, logout_zone, revive_noblesse, revive_heal, revive, remove_buffs, remove_pets, give_noblesse;
static int radius, enchant, revive_delay;
static int[][] spawn_loc;
L2Skill noblesse = SkillTable.getInstance().getInfo(1323, 1);
private static List<String> items = new FastList<String>();
private static List<String> grades = new FastList<String>(), classes = new FastList<String>();
public static List<int[]> rewards;
static String[] gradeNames = {"","D","C","B","A","S","S80","S84"};

@Override
protected void onEnter(L2Character character)
{
_names.put(activeChar.getObjectId(), activeChar.getName());
_titles.put(activeChar.getObjectId(), activeChar.getTitle());
character.setInsideZone(L2Character.ZONE_NOSUMMONFRIEND, true);
character.setInsideZone(L2Character.ZONE_MULTIFUNCTION, true);
if(!store_zone)
character.setInsideZone(L2Character.ZONE_NOSTORE, true);

if (character instanceof L2PcInstance)
{
L2PcInstance activeChar = ((L2PcInstance) character);
if(classes != null && classes.contains(""+activeChar.getClassId().getId()))
{
activeChar.teleToLocation(83597,147888,-3405);
activeChar.sendMessage("Your class is not allowed in this area.");
return;
}

for(L2ItemInstance o : activeChar.getInventory()._items)
{
if(o.isEquipable() && o.isEquipped() && !checkItem(o))
{
int slot = activeChar.getInventory().getSlotFromItem(o);
activeChar.getInventory().unEquipItemInBodySlot(slot);
activeChar.sendMessage(o.getName()+" unequiped because is not allowed inside this zone.");
}
}
activeChar.sendMessage("You entered in pvp zone.");
activeChar.getAppearance().setVisibleName("Player");
activeChar.getAppearance().setVisibleTitle("Kill Me");
clear(activeChar);
if(give_noblesse)
noblesse.getEffects(activeChar, activeChar);
if(pvp_enabled && activeChar.getPvpFlag() == 0)
activeChar.updatePvPFlag(1);
}
}

@Override
protected void onExit(L2Character character)
{
character.setInsideZone(L2Character.ZONE_NOSUMMONFRIEND, false);
character.setInsideZone(L2Character.ZONE_MULTIFUNCTION, false);
if(!store_zone)
character.setInsideZone(L2Character.ZONE_NOSTORE, false);

if (character instanceof L2PcInstance)
{
L2PcInstance activeChar = ((L2PcInstance) character);
activeChar.sendMessage("You left from pvp zone.");
_names.put(activeChar.getObjectId(), activeChar.getName());
if(pvp_enabled)
activeChar.stopPvPFlag();
}
}


@Override
public void onDieInside(final L2Character character)
{
if (character instanceof L2PcInstance)
{
final L2PcInstance activeChar = ((L2PcInstance) character);
if(revive)
{
ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
{
@Override
public void run()
{
activeChar.doRevive();
heal(activeChar);
int[] loc = spawn_loc[Rnd.get(spawn_loc.length)];
activeChar.teleToLocation(loc[0]+Rnd.get(-radius,radius), loc[1]+Rnd.get(-radius,radius), loc[2]);
}
},revive_delay*1000);
}
}
}

@Override
public void onReviveInside(L2Character character)
{
if (character instanceof L2PcInstance)
{
L2PcInstance activeChar = ((L2PcInstance) character);
if(revive_noblesse)
noblesse.getEffects(activeChar, activeChar);
if(revive_heal)
heal(activeChar);
}
}

private void clear (L2PcInstance player)
{
if(remove_buffs)
{
player.stopAllEffectsExceptThoseThatLastThroughDeath();
if(remove_pets)
{
L2Summon pet = player.getPet();
if(pet!= null)
{
pet.stopAllEffectsExceptThoseThatLastThroughDeath();
pet.unSummon(player);
}
}
}
else
{
if(remove_pets)
{
L2Summon pet = player.getPet();
if(pet!= null)
{
pet.unSummon(player);
}
}
}
}

static void heal(L2PcInstance activeChar)
{
activeChar.setCurrentHp(activeChar.getMaxHp());
activeChar.setCurrentCp(activeChar.getMaxCp());
activeChar.setCurrentMp(activeChar.getMaxMp());
}

public static void givereward(L2PcInstance player)
{
if(player.isInsideZone(L2Character.ZONE_MULTIFUNCTION))
{
for (int[] reward : rewards)
{
PcInventory inv = player.getInventory();
inv.addItem("Custom Reward", reward[0], reward[1], player, player);
}
}
}

public static boolean checkItem (L2ItemInstance item)
{
int o = item.getItem().getCrystalType();
int e = item.getEnchantLevel();

if(enchant != 0 && e >= enchant)
{
return false;
}

if(grades.contains(gradeNames[o]))
return false;

if(items != null && items.contains(""+item.getItemId()))
return false;
return true;
}

private static void loadConfigs()
{
try
{
Properties prop = new Properties();
prop.load(new FileInputStream(new File("./config/MultiFunctionZone.properties")));
pvp_enabled = Boolean.parseBoolean(prop.getProperty("EnablePvP", "False"));
spawn_loc = parseItemsList(prop.getProperty("SpawnLoc", "150111,144740,-12248"));
revive_delay = Integer.parseInt(prop.getProperty("ReviveDelay", "10"));
if(revive_delay != 0)
{
revive = true;
}
give_noblesse = Boolean.parseBoolean(prop.getProperty("GiveNoblesse", "False"));
String[] propertySplit = prop.getProperty("Items", "").split(",");
if (propertySplit.length != 0)
{
for(String i : propertySplit)
{
items.add(i);
}
}
propertySplit = prop.getProperty("Grades", "").split(",");
if (propertySplit.length != 0)
{
for(String i : propertySplit)
{
if(i.equals("D") || i.equals("C") || i.equals("B") || i.equals("A") || i.equals("S") || i.equals("S80") || i.equals("S84"))
grades.add(i);
}
}
propertySplit = prop.getProperty("Classes", "").split(",");
if (propertySplit.length != 0)
{
for(String i : propertySplit)
{
classes.add(i);
}
}
radius = Integer.parseInt(prop.getProperty("RespawnRadius", "500"));
enchant = Integer.parseInt(prop.getProperty("Enchant", "0"));
remove_buffs = Boolean.parseBoolean(prop.getProperty("RemoveBuffs", "False"));
remove_pets = Boolean.parseBoolean(prop.getProperty("RemovePets", "False"));
restart_zone = Boolean.parseBoolean(prop.getProperty("NoRestartZone", "False"));
store_zone = Boolean.parseBoolean(prop.getProperty("NoStoreZone", "False"));
logout_zone = Boolean.parseBoolean(prop.getProperty("NoLogoutZone", "False"));
revive_noblesse = Boolean.parseBoolean(prop.getProperty("ReviveNoblesse", "False"));
revive_heal = Boolean.parseBoolean(prop.getProperty("ReviveHeal", "False"));
rewards = new ArrayList<int[]>();
propertySplit = prop.getProperty("Rewards", "57,100000").split(";");
for (String reward : propertySplit)
{
String[] rewardSplit = reward.split(",");
if (rewardSplit.length == 2)
{
try
{
rewards.add(new int[]{Integer.parseInt(rewardSplit[0]), Integer.parseInt(rewardSplit[1])});
}
catch (NumberFormatException nfe)
{
}
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}

private static int[][] parseItemsList(String line)
{
final String[] propertySplit = line.split(";");
if (propertySplit.length == 0)
return null;

int i = 0;
String[] valueSplit;
final int[][] result = new int[propertySplit.length][];
for (String value : propertySplit)
{
valueSplit = value.split(",");
if (valueSplit.length != 3)
{
return null;
}

result[i] = new int[3];
try
{
result[i][0] = Integer.parseInt(valueSplit[0]);
}
catch (NumberFormatException e)
{
return null;
}
try
{
result[i][1] = Integer.parseInt(valueSplit[1]);
}
catch (NumberFormatException e)
{
return null;
}
try
{
result[i][2] = Integer.parseInt(valueSplit[2]);
}
catch (NumberFormatException e)
{
return null;
}
i++;
}
return result;
}
}

So far the only thing i have manage to add is


 


activeChar.getAppearance().setVisibleName("Player");

activeChar.getAppearance().setVisibleTitle("Kill Me");

 

which is obviously incompleted

 

What i need is:

PVP RESTRICTION

TVT RED EFFECT CIRCLE

SET NAME

SET TITLE

NO CLAN CREST

NO PARTY ON ENTER OR CALL PARTY

 

 

I doubt someone will make them for me so if you can at least give me an advice for each one of those? or do at least for name/title/pvp restriction while i will try to handle the others!

Link to comment
Share on other sites

  • 5 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Posts

    • Because the people they buy this files I share it for free because they give money for this shit 
    • HighFive [X15] - 22 November https://l2etina.com/ Discord   Exp/SP: x15  Adena: x8  Drop: x6  Spoil: x5 Quest Drop: x1 Quest Reward: x2 Manor: x1.5  Raid Boss Drop: x6  Epic RB Jewel Drop: x1  Safe Enchant: +4 Max Enchant: +16 Normal Scroll of Enchant Chance: 52% Blessed Scroll of Enchant Chance: 56% Elemental Stone chance: 50% Elemental Crystal chance: 30%    GAMEPLAY CONFIGURATION   Maximum Clients per PC: 3 2h duration on all buffs, dances, songs, summon, prophecies.  Buff slots: 24(+4 Divine Inspiration)  Dance/Song slots: 12 Skills are auto learn.  Automatic loot for monsters. Manual loot for raid bosses & epic bosses. 1st, 2nd, 3rd profession change for Adena on Class Master NPC. Sub-Class By Quest or Donation. Certification skills retail like (Quest required) Mana Potions: 1000 MP Restoration with 10 seconds cooldown.  Champion Monsters until Lv 75 (2% to chance to spawn)  Pride of Kamael buff is a SELF ONLY buff. You CAN NOT delevel to less than 70 Level. Control & click on an attribute or attribute crystal (adds them all together in 1 item)   BASIC FEATURES    NPC Buffer with all the important buffs.  GM shop up to S80 Dynasty & consumables.  Global Gatekeeper with all the important zones.  Ranking System in Community Board.  Item Auction House in Community Board.  Unique Auctioneer with a few clan halls release weekly.  Auction House with offers in Donation Pounds in Community Board.  Items, Monsters & Raid Bosses Database with many functions.  Character Control Panel with many functions accessible by .cfg command.  Donation Store with limited available options.     EXTRA FEATURES & USEFUL INFO Vote Reward System with  5 - 15 Festival Adena, cooldown usage & 12h duration  Vote Rune that increases your stats. Vote Rune: Increases your P. Def and M. Def by 6%, P. Attack by 4%, M. Attack by 4%, Movement Speed by 4% Automatic potions clicker system, setup window appears by typing .cp / .hp / .mp commands OLYMPIAD    Olympiad on 10 Days circle. (First Olympiad Period begins 11th of July)  New heroes every 1st,11th & 21st of each month.  Olympiad needs 9 minimum participants to begin.  Max Period Matches: 120  Class based option disabled.     Leveling Clan Cost & Required Members.    Clan Level 6: 5.000 Clan Reputation Points & 10+ members.  Clan Level 7: 10.000 Clan Reputation Points & 15+ members.  Clan Level 8: 20.000 Clan Reputation Points & 20+ members.  Clan Level 9: 40.000 Clan Reputation Points & 25+ members.  Clan Level 10: 40.000 Clan Reputation Points & 30+ members.  Clan Level 11: 75.000 Clan Reputation Points & 35+ members.     Unique Clan Hall Auction System - 1 Clan Hall per Village releases every week on Auction. - Clan Hall Auctions are finishing every Monday 18:00 (GMT+3). - Winning Bidder has to pay 25% of his total winning bid weekly to be able to maintain his Clan Hall. - 10% Loser's Tax on his total placed bid is applied. Grade #1 Clan Halls Requirements Clan Level 6+, Clan Members 15+, Average Level per member 70+. Grade #2 Clan Halls Requirements Clan Level 7+, Clan Members 20+, Average Level per member 74+. Grade #3 Clan Halls Requirements Clan Level 8+, Clan Members 30+, Average Level per member 78+.     DEATHMATCH Description: The goal in Deathmatch Event, also known as free-for-all, is to kill as many other players as you can in 10 minutes. After death, you will respawn in random location after 10 seconds. The one with the most kills wins the Event. TEAM VS TEAM Description: In Team vs Team Event all participating members are divided in two sides (Red - Blue) and the only goal is to kill as many players you can from the enemy side. Each kill brings score to your Team. Respawn takes 5 seconds. Event Duration: 10 minutes CAPTURE THE FLAG Description: Capture the Flag is a Team Event. Try to steal Flag that is placed near enemy spawn location and bring it to your territory. Don't forget to defend your flag, we don't want it to be hold by enemy hands! Event Duration: 10 minutes. TREASURE HUNT Description: Treasure Hunt is a free-for-all Event. Your goal is to find chests and open them! Focus on other players too, you are getting points for killing them. You get 1 Festival Adena per Chest.         KOREAN STYLE Description: Korean Style is a Team Event. All you need to do is defeat enemy Team in 1 VS 1 Fights. Prove you are the best and kill the enemy in a fair battle!   FIGHT FOR THRONE Description: Team Event. Protect the Castle from the Invaders and don't let them engrave the Seal of Ruler or Castle Throne will be theirs. Every invader is able to cast the Spell. Team which will possess the Castle after 10 minutes, will win the Event.          RAID BOSSES, EPIC BOSSES AND INSTANCES   Shilen's Messenger, Cabrio: 16-20h  Death Lord Hallate: 16-20h  Kernon: 16-20h Longhorn Golkonda: 16-20h       Ant Queen: 23.5-24.5h Ant Queen spawns every day at 19:00 - 20:00 CET     Baium: 120-124h Baium spawns every: 1st, 6th, 11th, 16th, 21st and 26th of each month at 20:00 - 22:00 CET     Antharas: 168-170h Antharas spawns every: 4th, 14th and 24th of each month at 20:00 - 22:00 CET     Beleth: 192-194h     Valakas: 240-242h Valakas spawns every: 8th, 18th and 28th of each month at 20:00 - 22:00 CET     Epidos: 2h      Instances: Frintezza Required players: 9  Zaken Daytime Lv 83 Required players: 9   Zaken Daytime Lv 60 Required players: 9   Zaken Nightly Lv 60 Required players: 27  Instances: Normal Freya Required players: 9  Instances: Hard Freya Required players: 18  Instances: TIAT Required players: 11  Instances: Beleth Required players: 18    
    • Description: Greetings, Lineage 2 server administrators! We present to you Contest Bot—a Telegram bot designed for hosting contests with in-game prizes. Our bot offers daily contests with main prizes for winners and consolation prizes for all participants, as well as contests scheduled for specific dates and times. Daily Contests: Engage your players with daily contests, increasing their involvement and activity. Scheduled Contests: Host contests not only daily but also on specified dates and times, allowing you to plan events on your server. Multiple Servers: The bot supports multiple game servers, currently supporting Eternity, Lucera, Pain. New builds can also be easily integrated. Server Selection: Winners can choose the game server on which they want to receive their prize, making the process more flexible and convenient. Ease of Use: Easy setup and management of the bot, saving your time and effort. Benefits: Increased Player Engagement: Regular contests keep interest in your server high and stimulate player activity. Increased Number of Participants: Participation in contests attracts new players and retains current ones. Server Loyalty: Prizes and contests create a positive experience and strengthen player loyalty to your server. Acquisition: Interested in increasing player engagement and activity on your server? Contact us via direct messages or https://t.me/@se1dhe  
  • Topics

×
×
  • Create New...