Перейти к содержанию
Авторизация  
Raxus

Защита От Дропа При Пк...

Рекомендуемые сообщения

Решил реализовать такую штучку: За определённое кол-во монет, персонажу даётся скилл который даёт единоразовую защиту от дропа при пк (кол-во пк неважно).

Копал в скиллах Clan Luck и Lucky - насколько я понял они такую защиту не дают, да и в исходах не нашёл кода этих скилов. Так вот как бы мне сделать такой скильчик, или хотя бы его иллюзию, главное чтоб эффект был соответствующий?

Изменено пользователем Raxus

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ПО алгоритму могу сказать что тут скорее он таков :

Если использовать итем , то кол-во итемов , которое дропнется 0 на определенное время. ПОсле заданое

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ПО алгоритму могу сказать что тут скорее он таков :

Если использовать итем , то кол-во итемов , которое дропнется 0 на определенное время. ПОсле заданое

 

именно надо не на определённое время. Если тебя слили когда ты был пк, защита сработала и исчезла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Могу сделать на платной основе, пишите :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Могу сделать на платной основе, пишите :D

 

я могу и сам сделать, только мну нужно подтолкнуть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Akuma ты тока платно все делаешь походу?

 

В подобных случаях, у человека два выхода:

 

1. Учить язык.

2. Заказывать работу.

 

Если бы человек занимался обучением, его вопрос бы стоял иначе: Он бы обращался с конкретной проблемой/вопросом по коду.

В таких случаях я никогда не отказываю в помощи, а вот тратить свое время и помогать человеку у которого нету желания вкладывать свои силы в обучение, нет ни малейшего желания.

 

PS. Ник читается как "Акуму".

Изменено пользователем Akumu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Когда сделаете, кидайте сюда:D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В подобных случаях, у человека два выхода:

 

1. Учить язык.

2. Заказывать работу.

 

Если бы человек занимался обучением, его вопрос бы стоял иначе: Он бы обращался с конкретной проблемой/вопросом по коду.

В таких случаях я никогда не отказываю в помощи, а вот тратить свое время и помогать человеку у которого нету желания вкладывать свои силы в обучение, нет ни малейшего желания.

 

PS. Ник читается как "Акуму".

 

Ну хорошо, вот вам конкретный вопрос по коду

 

Скрытый текст

	private void onDieDropItem(L2Character killer)
{
	if (atEvent || (CTF._started && _inEventCTF) || killer == null)
		return;

	if (getKarma()<=0
			&& killer instanceof L2PcInstance
			&& ((L2PcInstance)killer).getClan()!=null
			&& getClan()!=null
			&& (
					((L2PcInstance)killer).getClan().isAtWarWith(getClanId())
//					  || this.getClan().isAtWarWith(((L2PcInstance)killer).getClanId())
			   )
	   )
		return;

	if (!isInsideZone(ZONE_PVP) && (!isGM() || Config.KARMA_DROP_GM))
	{
		boolean isKarmaDrop = false;
		boolean isKillerNpc = (killer instanceof L2NpcInstance);
		int pkLimit = Config.KARMA_PK_LIMIT;;

		int dropEquip		   = 0;
		int dropEquipWeapon	 = 0;
		int dropItem			= 0;
		int dropLimit		   = 0;
		int dropPercent		 = 0;

		if (getKarma() > 0 && getPkKills() >= pkLimit)
		{
			isKarmaDrop = true;
			dropPercent = Config.KARMA_RATE_DROP;
			dropEquip = Config.KARMA_RATE_DROP_EQUIP;
			dropEquipWeapon = Config.KARMA_RATE_DROP_EQUIP_WEAPON;
			dropItem = Config.KARMA_RATE_DROP_ITEM;
			dropLimit = Config.KARMA_DROP_LIMIT;
		}
		else if (isKillerNpc && getLevel() > 4 && !isFestivalParticipant())
		{
			dropPercent = Config.PLAYER_RATE_DROP;
			dropEquip = Config.PLAYER_RATE_DROP_EQUIP;
			dropEquipWeapon = Config.PLAYER_RATE_DROP_EQUIP_WEAPON;
			dropItem = Config.PLAYER_RATE_DROP_ITEM;
			dropLimit = Config.PLAYER_DROP_LIMIT;
		}

		int dropCount = 0;
		while (dropPercent > 0 && Rnd.get(100) < dropPercent && dropCount < dropLimit)
		{
			int itemDropPercent = 0;
			List<Integer> nonDroppableList = new FastList<Integer>();
			List<Integer> nonDroppableListPet = new FastList<Integer>();

			nonDroppableList = Config.KARMA_LIST_NONDROPPABLE_ITEMS;
			nonDroppableListPet = Config.KARMA_LIST_NONDROPPABLE_ITEMS;

			for (L2ItemInstance itemDrop : getInventory().getItems())
			{
				// Don't drop
				if (
						itemDrop.isAugmented() ||												// Dont drop augmented items
						itemDrop.isShadowItem() ||												// Dont drop Shadow Items
						!itemDrop.isDropable() ||
						itemDrop.getItemId() == 57 ||										   // Adena
						itemDrop.getItem().getType2() == L2Item.TYPE2_QUEST ||				  // Quest Items
						nonDroppableList.contains(itemDrop.getItemId()) ||					  // Item listed in the non droppable item list
						nonDroppableListPet.contains(itemDrop.getItemId()) ||				   // Item listed in the non droppable pet item list
						getPet() != null && getPet().getControlItemId() == itemDrop.getItemId() // Control Item of active pet
				) continue;

				if (itemDrop.isEquipped())
				{
					// Set proper chance according to Item type of equipped Item
					itemDropPercent = itemDrop.getItem().getType2() == L2Item.TYPE2_WEAPON ? dropEquipWeapon : dropEquip;
					getInventory().unEquipItemInSlotAndRecord(itemDrop.getEquipSlot());
				}
				else itemDropPercent = dropItem; // Item in inventory

				// NOTE: Each time an item is dropped, the chance of another item being dropped gets lesser (dropCount * 2)
				if (Rnd.get(100) < itemDropPercent)
				{
					dropItem("DieDrop", itemDrop, killer, true);

					if (isKarmaDrop)
						_log.warning(getName() + " has karma and dropped id = " + itemDrop.getItemId() + ", count = " + itemDrop.getCount());
					else
						_log.warning(getName() + " dropped id = " + itemDrop.getItemId() + ", count = " + itemDrop.getCount());

					dropCount++;
					break;
				}
			}
		}
	}
}

 

Где в этом куске кода, можно указать, что кол-во дропнутых вещеё будет равно 0?

Изменено пользователем Akumu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Достаточно просто остановить выполнение функции, до того как она достигнет стадии выполнения цикла дропа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Ну хорошо, вот вам конкретный вопрос по коду

 

Скрытый текст

	private void onDieDropItem(L2Character killer)
{
	if (atEvent || (CTF._started && _inEventCTF) || killer == null)
		return;

	if (getKarma()<=0
			&& killer instanceof L2PcInstance
			&& ((L2PcInstance)killer).getClan()!=null
			&& getClan()!=null
			&& (
					((L2PcInstance)killer).getClan().isAtWarWith(getClanId())
//					  || this.getClan().isAtWarWith(((L2PcInstance)killer).getClanId())
			   )
	   )
		return;

	if (!isInsideZone(ZONE_PVP) && (!isGM() || Config.KARMA_DROP_GM))
	{
		boolean isKarmaDrop = false;
		boolean isKillerNpc = (killer instanceof L2NpcInstance);
		int pkLimit = Config.KARMA_PK_LIMIT;;

		int dropEquip		   = 0;
		int dropEquipWeapon	 = 0;
		int dropItem			= 0;
		int dropLimit		   = 0;
		int dropPercent		 = 0;

		if (getKarma() > 0 && getPkKills() >= pkLimit)
		{
			isKarmaDrop = true;
			dropPercent = Config.KARMA_RATE_DROP;
			dropEquip = Config.KARMA_RATE_DROP_EQUIP;
			dropEquipWeapon = Config.KARMA_RATE_DROP_EQUIP_WEAPON;
			dropItem = Config.KARMA_RATE_DROP_ITEM;
			dropLimit = Config.KARMA_DROP_LIMIT;
		}
		else if (isKillerNpc && getLevel() > 4 && !isFestivalParticipant())
		{
			dropPercent = Config.PLAYER_RATE_DROP;
			dropEquip = Config.PLAYER_RATE_DROP_EQUIP;
			dropEquipWeapon = Config.PLAYER_RATE_DROP_EQUIP_WEAPON;
			dropItem = Config.PLAYER_RATE_DROP_ITEM;
			dropLimit = Config.PLAYER_DROP_LIMIT;
		}

		int dropCount = 0;
		while (dropPercent > 0 && Rnd.get(100) < dropPercent && dropCount < dropLimit)
		{
			int itemDropPercent = 0;
			List<Integer> nonDroppableList = new FastList<Integer>();
			List<Integer> nonDroppableListPet = new FastList<Integer>();

			nonDroppableList = Config.KARMA_LIST_NONDROPPABLE_ITEMS;
			nonDroppableListPet = Config.KARMA_LIST_NONDROPPABLE_ITEMS;

			for (L2ItemInstance itemDrop : getInventory().getItems())
			{
				// Don't drop
				if (
						itemDrop.isAugmented() ||												// Dont drop augmented items
						itemDrop.isShadowItem() ||												// Dont drop Shadow Items
						!itemDrop.isDropable() ||
						itemDrop.getItemId() == 57 ||										   // Adena
						itemDrop.getItem().getType2() == L2Item.TYPE2_QUEST ||				  // Quest Items
						nonDroppableList.contains(itemDrop.getItemId()) ||					  // Item listed in the non droppable item list
						nonDroppableListPet.contains(itemDrop.getItemId()) ||				   // Item listed in the non droppable pet item list
						getPet() != null && getPet().getControlItemId() == itemDrop.getItemId() // Control Item of active pet
				) continue;

				if (itemDrop.isEquipped())
				{
					// Set proper chance according to Item type of equipped Item
					itemDropPercent = itemDrop.getItem().getType2() == L2Item.TYPE2_WEAPON ? dropEquipWeapon : dropEquip;
					getInventory().unEquipItemInSlotAndRecord(itemDrop.getEquipSlot());
				}
				else itemDropPercent = dropItem; // Item in inventory

				// NOTE: Each time an item is dropped, the chance of another item being dropped gets lesser (dropCount * 2)
				if (Rnd.get(100) < itemDropPercent)
				{
					dropItem("DieDrop", itemDrop, killer, true);

					if (isKarmaDrop)
						_log.warning(getName() + " has karma and dropped id = " + itemDrop.getItemId() + ", count = " + itemDrop.getCount());
					else
						_log.warning(getName() + " dropped id = " + itemDrop.getItemId() + ", count = " + itemDrop.getCount());

					dropCount++;
					break;
				}
			}
		}
	}
}

 

Где в этом куске кода, можно указать, что кол-во дропнутых вещеё будет равно 0?

я думаю Акуму иммел виду помощь по коду который Вы писали и пытались что то сделать а не тупо скопировать с исходов и выложить что бы все дописали пользователи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
я думаю Акуму иммел виду помощь по коду который Вы писали и пытались что то сделать а не тупо скопировать с исходов и выложить что бы все дописали пользователи.

ну это же конкретный вопрос по коду

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как вариант:

L2Skill Skill = SkillTable.getInstance().getInfo(ид скила, уровень скила);

if(Skill != null)

return;

Изменено пользователем sn1ke

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Как вариант:

L2Skill Skill = SkillTable.getInstance().getInfo(ид скила, уровень скила);

if(Skill != null)

return;

 

Не думаю что проверка на наличие данного скила в датапаке вам чем-то поможет 8)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Как вариант:

L2Skill Skill = SkillTable.getInstance().getInfo(ид скила, уровень скила);

if(Skill != null)

return;

 

т.е. вы имеете в виду, что если у перса нет этого скила то не дропаться, скороей всего надо равно поставить, или вы что-то другое имели в виду

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Не думаю что проверка на наличие данного скила в датапаке вам чем-то поможет 8)

ех забыл точно как проверить есть ли скил :(

 

вроде так?)

if(getKnownSkill(Skill) != null)

return;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
т.е. вы имеете в виду, что если у перса нет этого скила то не дропаться, скороей всего надо равно поставить, или вы что-то другое имели в виду

Ну если у персонажа есть скил то дропа нет с него.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

адену поставьте 8) если есть деньги то дропа нету

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ех забыл точно как проверить есть ли скил 8)

 

вроде так?)

if(getKnownSkill(Skill) != null)

return;

 

getLearnSkill

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хз мб конечно я не так понял тебя ...

но думаю надо "пробижатся" по всем еффектам которые весят на чаре

for(L2Effect effect : activeChar.getAllEffects()){

if(effect.getSkill().getId() == id скила)

return;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а ну щас попробую

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Хз мб конечно я не так понял тебя ...

но думаю надо "пробижатся" по всем еффектам которые весят на чаре

for(L2Effect effect : activeChar.getAllEffects()){

if(effect.getSkill().getId() == id скила)

return;

}

наоборот, если у чара нет этого скила то return, и не эффекты а скиллы

Изменено пользователем Raxus

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
наоборот, если у чара нет этого скила то return, и не эффекты а скиллы

мм.. значит не правельно понял, я думал скилл как то юзается и вешается бафф.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

дать Х итем, в базе убрать все манипуляции с ним

если есть итем - удаляем,выходим

иначе идем дальше

 

 

Скрытый текст
	final int ITEM_ID=57;
if(getInventory().getItemByItemId(ITEM_ID)!=null)
{
	destroyItemByItemId("Anti_PK", ITEM_ID, 1, this, false);
	return;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...