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

Задержка Перед Получением Квест Айтема.

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

Есть сборка скория и аналогичная (l2jfrozen)

Скопировал часть кода которая по моему мнению отвечает за задержку.

Код:

 

 

if(itemCount > 0)

{

// if over neededCount, just fill the gap

if(neededCount > 0 && currentCount + itemCount > neededCount)

{

itemCount = neededCount - currentCount;

}

 

// Inventory slot check

if(!getPlayer().getInventory().validateCapacityByItemId(itemId))

return false;

 

//just wait 3-5 seconds before the drop

try

{

Thread.sleep(Rnd.get(3, 5)*1000);

}

catch(InterruptedException e)

{

}

 

// Give the item to Player

getPlayer().addItem("Quest", itemId, itemCount, getPlayer().getTarget(), true);

 

if(sound)

{

playSound(currentCount + itemCount < neededCount ? "Itemsound.quest_itemget" : "Itemsound.quest_middle");

}

}

 

 

 

до редактирования:

 

 

if(itemCount > 0)

{

// if over neededCount, just fill the gap

if(neededCount > 0 && currentCount + itemCount > neededCount)

{

itemCount = neededCount - currentCount;

}

 

// Inventory slot check

if(!getPlayer().getInventory().validateCapacityByItemId(itemId))

return false;

 

// Give the item to Player

getPlayer().addItem("Quest", itemId, itemCount, getPlayer().getTarget(), true);

 

if(sound)

{

playSound(currentCount + itemCount < neededCount ? "Itemsound.quest_itemget" : "Itemsound.quest_middle");

}

}

 

 

 

 

Но это не работает, подскажите в чем моя ошибка?

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


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

Кину свой грех в сторону работы Базы Данных!

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


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

мб выдачу итема addItem в трид засунуть?

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


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

Мне нужно как раз наоборот чтобы задержка была, причем тут мой мускул?

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


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

да правда ? а не сделать ли задержку на получение итема не ? или на оборот

Вот это и хочу сделать, подскажи что в коде неправильно

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


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

чья сборка или код стяну гляну что бы хоть видеть я то не ванга везде по разному

 

но добавлю без исходов и нечего думать если делать с умом а не для ололо школы

Изменено пользователем Расторгуев

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


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

чья сборка или код стяну гляну что бы хоть видеть я то не ванга везде по разному

 

но добавлю без исходов и нечего думать если делать с умом а не для ололо школы

сборка скория (ласт сурсы), исходники в шаре есть

из откладки с помощью l2phx я понял что нужно редактировать именно этот сурс (QuestState)

могу ошибаться

 

 

/*

* 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 com.l2scoria.gameserver.model.quest;

 

import com.l2scoria.Config;

import com.l2scoria.gameserver.GameTimeController;

import com.l2scoria.gameserver.cache.HtmCache;

import com.l2scoria.gameserver.managers.QuestManager;

import com.l2scoria.gameserver.model.L2Character;

import com.l2scoria.gameserver.model.L2DropData;

import com.l2scoria.gameserver.model.actor.instance.L2ItemInstance;

import com.l2scoria.gameserver.model.actor.instance.L2MonsterInstance;

import com.l2scoria.gameserver.model.actor.instance.L2NpcInstance;

import com.l2scoria.gameserver.model.actor.instance.L2PcInstance;

import com.l2scoria.gameserver.network.SystemMessageId;

import com.l2scoria.gameserver.network.serverpackets.*;

import com.l2scoria.gameserver.skills.Stats;

import com.l2scoria.util.random.Rnd;

import javolution.util.FastList;

import javolution.util.FastMap;

import org.apache.log4j.Logger;

 

import java.util.Map;

 

/**

* @author Luis Arias

*/

public final class QuestState

{

protected static final Logger _log = Logger.getLogger(Quest.class.getName());

 

/** Quest associated to the QuestState */

private final String _questName;

 

/** Player who engaged the quest */

private final L2PcInstance _player;

 

/** State of the quest */

private State _state;

 

/** Boolean representing the completion of the quest */

private boolean _isCompleted;

 

/** List of couples (variable for quest,value of the variable for quest) */

private Map<String, String> _vars;

 

/** Boolean flag letting QuestStateManager know to exit quest when cleaning up */

private boolean _isExitQuestOnCleanUp = false;

 

/**

* Constructor of the QuestState : save the quest in the list of quests of the player.<BR/>

* <BR/>

* <U><I>Actions :</U></I><BR/>

* <LI>Save informations in the object QuestState created (Quest, Player, Completion, State)</LI> <LI>Add the

* QuestState in the player's list of quests by using setQuestState()</LI> <LI>Add drops gotten by the quest</LI> <BR/>

*

* @param quest : quest associated with the QuestState

* @param player : L2PcInstance pointing out the player

* @param state : state of the quest

* @param completed : boolean for completion of the quest

*/

QuestState(Quest quest, L2PcInstance player, State state, boolean completed)

{

_questName = quest.getName();

_player = player;

 

// Save the state of the quest for the player in the player's list of quest onwed

getPlayer().setQuestState(this);

 

_isCompleted = completed;

// set the state of the quest

_state = state;

}

 

public String getQuestName()

{

return _questName;

}

 

/**

* Return the quest

*

* @return Quest

*/

public Quest getQuest()

{

return QuestManager.getInstance().getQuest(_questName);

}

 

/**

* Return the L2PcInstance

*

* @return L2PcInstance

*/

public L2PcInstance getPlayer()

{

return _player;

}

 

/**

* Return the state of the quest

*

* @return State

*/

public State getState()

{

return _state;

}

 

/**

* Return true if quest completed, false otherwise

*

* @return boolean

*/

public boolean isCompleted()

{

return _isCompleted;

}

 

/**

* Return true if quest started, false otherwise

*

* @return boolean

*/

public boolean isStarted()

{

if(getStateId().equals("Start") || getStateId().equals("Completed"))

return false;

 

return true;

}

 

/**

* Return state of the quest after its initialization.<BR>

* <BR>

* <U><I>Actions :</I></U> <LI>Remove drops from previous state</LI> <LI>Set new state of the quest</LI> <LI>Add

* drop for new state</LI> <LI>Update information in database</LI> <LI>Send packet QuestList to client</LI>

*

* @param state

* @return object

*/

public Object setState(State state)

{

// set new state if it is not already in that state

if(_state != state)

{

if(state == null)

return null;

 

_state = state;

Quest.updateQuestInDb(this);

getPlayer().sendPacket(new QuestList());

 

if(getStateId().equals("Completed"))

{

_isCompleted = true;

}

else

{

_isCompleted = false;

}

}

 

return state;

}

 

/**

* Return ID of the state of the quest

*

* @return String

*/

public String getStateId()

{

return getState().getName();

}

 

/**

* Add parameter used in quests.

*

* @param var : String pointing out the name of the variable for quest

* @param val : String pointing out the value of the variable for quest

* @return String (equal to parameter "val")

*/

String setInternal(String var, String val)

{

if(_vars == null)

{

_vars = new FastMap<String, String>();

}

 

if(val == null)

{

val = "";

}

 

_vars.put(var, val);

 

return val;

}

 

/**

* Return value of parameter "val" after adding the couple (var,val) in class variable "vars".<BR>

* <BR>

* <U><I>Actions :</I></U><BR>

* <LI>Initialize class variable "vars" if is null</LI> <LI>Initialize parameter "val" if is null</LI> <LI>

* Add/Update couple (var,val) in class variable FastMap "vars"</LI> <LI>If the key represented by "var" exists in

* FastMap "vars", the couple (var,val) is updated in the database. The key is known as existing if the preceding

* value of the key (given as result of function put()) is not null.<BR>

* If the key doesn't exist, the couple is added/created in the database</LI>

*

* @param var : String indicating the name of the variable for quest

* @param val : String indicating the value of the variable for quest

* @return String (equal to parameter "val")

*/

public String set(String var, String val)

{

if(_vars == null)

{

_vars = new FastMap<String, String>();

}

 

if(val == null)

{

val = "";

}

 

// FastMap.put() returns previous value associated with specified key, or null if there was no mapping for key.

String old = _vars.put(var, val);

 

if(old != null)

{

Quest.updateQuestVarInDb(this, var, val);

}

else

{

Quest.createQuestVarInDb(this, var, val);

}

 

if(var == "cond")

{

try

{

int previousVal = 0;

 

try

{

previousVal = Integer.parseInt(old);

}

catch(Exception ex)

{

previousVal = 0;

}

 

setCond(Integer.parseInt(val), previousVal);

}

catch(Exception e)

{

_log.info(getPlayer().getName() + ", " + getQuestName() + " cond [" + val + "] is not an integer. Value stored, but no packet was sent: " + e);

}

}

 

old = null;

 

return val;

}

 

/**

* Internally handles the progression of the quest so that it is ready for sending appropriate packets to the client<BR>

* <BR>

* <U><I>Actions :</I></U><BR>

* <LI>Check if the new progress number resets the quest to a previous (smaller) step</LI> <LI>If not, check if

* quest progress steps have been skipped</LI> <LI>If skipped, prepare the variable completedStateFlags

* appropriately to be ready for sending to clients</LI> <LI>If no steps were skipped, flags do not need to be

* prepared...</LI> <LI>If the passed step resets the quest to a previous step, reset such that steps after the

* parameter are not considered, while skipped steps before the parameter, if any, maintain their info</LI>

*

* @param cond : int indicating the step number for the current quest progress (as will be shown to the client)

* @param old : int indicating the previously noted step For more info on the variable communicating the progress

* steps to the client, please see

* @link com.l2scoria.loginserver.serverpacket.QuestList

*/

private void setCond(int cond, int old)

{

int completedStateFlags = 0; // initializing...

 

// if there is no change since last setting, there is nothing to do here

if(cond == old)

return;

 

// cond 0 and 1 do not need completedStateFlags. Also, if cond > 1, the 1st step must

// always exist (i.e. it can never be skipped). So if cond is 2, we can still safely

// assume no steps have been skipped.

// Finally, more than 31 steps CANNOT be supported in any way with skipping.

if(cond < 3 || cond > 31)

{

unset("__compltdStateFlags");

}

else

{

completedStateFlags = getInt("__compltdStateFlags");

}

 

// case 1: No steps have been skipped so far...

if(completedStateFlags == 0)

{

// check if this step also doesn't skip anything. If so, no further work is needed

// also, in this case, no work is needed if the state is being reset to a smaller value

// in those cases, skip forward to informing the client about the change...

 

// ELSE, if we just now skipped for the first time...prepare the flags!!!

if(cond > old + 1)

{

// set the most significant bit to 1 (indicates that there exist skipped states)

// also, ensure that the least significant bit is an 1 (the first step is never skipped, no matter

// what the cond says)

completedStateFlags = 0x80000001;

 

// since no flag had been skipped until now, the least significant bits must all

// be set to 1, up until "old" number of bits.

completedStateFlags |= (1 << old) - 1;

 

// now, just set the bit corresponding to the passed cond to 1 (current step)

completedStateFlags |= 1 << cond - 1;

set("__compltdStateFlags", String.valueOf(completedStateFlags));

}

}

// case 2: There were exist previously skipped steps

else

{

// if this is a push back to a previous step, clear all completion flags ahead

if(cond < old)

{

completedStateFlags &= (1 << cond) - 1; // note, this also unsets the flag indicating that there exist skips

 

//now, check if this resulted in no steps being skipped any more

if(completedStateFlags == (1 << cond) - 1)

{

unset("__compltdStateFlags");

}

else

{

// set the most significant bit back to 1 again, to correctly indicate that this skips states.

// also, ensure that the least significant bit is an 1 (the first step is never skipped, no matter

// what the cond says)

completedStateFlags |= 0x80000001;

set("__compltdStateFlags", String.valueOf(completedStateFlags));

}

}

// if this moves forward, it changes nothing on previously skipped steps...so just mark this

// state and we are done

else

{

completedStateFlags |= 1 << cond - 1;

set("__compltdStateFlags", String.valueOf(completedStateFlags));

}

}

 

// send a packet to the client to inform it of the quest progress (step change)

QuestList ql = new QuestList();

getPlayer().sendPacket(ql);

ql = null;

 

int questId = getQuest().getQuestIntId();

 

if(questId > 0 && questId < 999 && cond > 0)

{

getPlayer().sendPacket(new ExShowQuestMark(questId));

}

}

 

/**

* Remove the variable of quest from the list of variables for the quest.<BR>

* <BR>

* <U><I>Concept : </I></U> Remove the variable of quest represented by "var" from the class variable FastMap "vars"

* and from the database.

*

* @param var : String designating the variable for the quest to be deleted

* @return String pointing out the previous value associated with the variable "var"

*/

public String unset(String var)

{

if(_vars == null)

return null;

 

String old = _vars.remove(var);

 

if(old != null)

{

Quest.deleteQuestVarInDb(this, var);

}

 

return old;

}

 

/**

* Return the value of the variable of quest represented by "var"

*

* @param var : name of the variable of quest

* @return Object

*/

public Object get(String var)

{

if(_vars == null)

return null;

 

return _vars.get(var);

}

 

/**

* Return the value of the variable of quest represented by "var"

*

* @param var : String designating the variable for the quest

* @return int

*/

public int getInt(String var)

{

int varint = 0;

 

try

{

varint = Integer.parseInt(_vars.get(var));

}

catch(Exception e)

{

if(Config.DEBUG) {

_log.info(getPlayer().getName() + ": variable " + var + " isn't an integer: " + varint + e);

}

//TODO: comments

if(Config.AUTODELETE_INVALID_QUEST_DATA)

{

exitQuest(true);

}

}

 

return varint;

}

 

/**

* Add player to get notification of characters death

*

* @param character : L2Character of the character to get notification of death

*/

public void addNotifyOfDeath(L2Character character)

{

if(character == null)

return;

 

character.addNotifyQuestOfDeath(this);

}

 

/**

* Return the quantity of one sort of item hold by the player

*

* @param itemId : ID of the item wanted to be count

* @return int

*/

public int getQuestItemsCount(int itemId)

{

int count = 0;

 

for(L2ItemInstance item : getPlayer().getInventory().getItems())

if(item.getItemId() == itemId)

{

count += item.getCount();

}

 

return count;

}

 

/**

* Return the level of enchantment on the weapon of the player(Done specifically for weapon SA's)

*

* @param itemId : ID of the item to check enchantment

* @return int

*/

public int getEnchantLevel(int itemId)

{

L2ItemInstance enchanteditem = getPlayer().getInventory().getItemByItemId(itemId);

 

if(enchanteditem == null)

return 0;

 

return enchanteditem.getEnchantLevel();

}

 

/**

* Give item/reward to the player

*

* @param itemId

* @param count

*/

public void giveItems(int itemId, int count)

{

giveItems(itemId, count, 0);

}

 

public void giveItems(int itemId, int count, int enchantlevel)

{

if(count <= 0)

return;

 

int questId = getQuest().getQuestIntId();

 

// If item for reward is gold (ID=57), modify count with rate for quest reward

if(itemId == 57 && !(questId >= 217 && questId <= 233) && !(questId >= 401 && questId <= 418))

{

count = (int) (count * Config.RATE_QUESTS_REWARD);

}

 

// Set quantity of item

// Add items to player's inventory

L2ItemInstance item = getPlayer().getInventory().addItem("Quest", itemId, count, getPlayer(), getPlayer().getTarget());

 

if(item == null)

return;

 

if(enchantlevel > 0)

{

item.setEnchantLevel(enchantlevel);

}

 

// If item for reward is gold, send message of gold reward to client

if(itemId == 57)

{

SystemMessage smsg = new SystemMessage(SystemMessageId.EARNED_ADENA);

smsg.addNumber(count);

getPlayer().sendPacket(smsg);

smsg = null;

}

// Otherwise, send message of object reward to client

else

{

if(count > 1)

{

SystemMessage smsg = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);

smsg.addItemName(item.getItemId());

smsg.addNumber(count);

getPlayer().sendPacket(smsg);

smsg = null;

}

else

{

SystemMessage smsg = new SystemMessage(SystemMessageId.EARNED_ITEM);

smsg.addItemName(item.getItemId());

getPlayer().sendPacket(smsg);

smsg = null;

}

}

getPlayer().sendPacket(new ItemList(getPlayer(), false));

 

StatusUpdate su = new StatusUpdate(getPlayer().getObjectId());

su.addAttribute(StatusUpdate.CUR_LOAD, getPlayer().getCurrentLoad());

getPlayer().sendPacket(su);

su = null;

}

 

/**

* Drop Quest item using Config.RATE_DROP_QUEST

*

* @param itemId : int Item Identifier of the item to be dropped

* @param count(minCount, maxCount) : int Quantity of items to be dropped

* @param neededCount : Quantity of items needed for quest

* @param dropChance : int Base chance of drop, same as in droplist

* @param sound : boolean indicating whether to play sound

* @return boolean indicating whether player has requested number of items

*/

public boolean dropQuestItems(int itemId, int count, int neededCount, int dropChance, boolean sound)

{

return dropQuestItems(itemId, count, count, neededCount, dropChance, sound);

}

 

public boolean dropQuestItems(int itemId, int minCount, int maxCount, int neededCount, int dropChance, boolean sound)

{

dropChance *= Config.RATE_DROP_QUEST / (getPlayer().getParty() != null ? getPlayer().getParty().getMemberCount() : 1);

 

int currentCount = getQuestItemsCount(itemId);

 

if(neededCount > 0 && currentCount >= neededCount)

return true;

 

if(currentCount >= neededCount)

return true;

 

int itemCount = 0;

int random = Rnd.get(L2DropData.MAX_CHANCE);

 

while(random < dropChance)

{

// Get the item quantity dropped

if(minCount < maxCount)

{

itemCount += Rnd.get(minCount, maxCount);

}

else if(minCount == maxCount)

{

itemCount += minCount;

}

else

{

itemCount++;

}

 

// Prepare for next iteration if dropChance > L2DropData.MAX_CHANCE

dropChance -= L2DropData.MAX_CHANCE;

}

 

if(itemCount > 0)

{

// if over neededCount, just fill the gap

if(neededCount > 0 && currentCount + itemCount > neededCount)

{

itemCount = neededCount - currentCount;

}

 

// Inventory slot check

if(!getPlayer().getInventory().validateCapacityByItemId(itemId))

return false;

 

// Give the item to Player

getPlayer().addItem("Quest", itemId, itemCount, getPlayer().getTarget(), true);

 

if(sound)

{

playSound(currentCount + itemCount < neededCount ? "Itemsound.quest_itemget" : "Itemsound.quest_middle");

}

}

 

return neededCount > 0 && currentCount + itemCount >= neededCount;

}

 

//TODO: More radar functions need to be added when the radar class is complete.

// BEGIN STUFF THAT WILL PROBABLY BE CHANGED

public void addRadar(int x, int y, int z)

{

getPlayer().getRadar().addMarker(x, y, z);

}

 

public void removeRadar(int x, int y, int z)

{

getPlayer().getRadar().removeMarker(x, y, z);

}

 

public void clearRadar()

{

getPlayer().getRadar().removeAllMarkers();

}

 

// END STUFF THAT WILL PROBABLY BE CHANGED

 

/**

* Remove items from player's inventory when talking to NPC in order to have rewards.<BR>

* <BR>

* <U><I>Actions :</I></U> <LI>Destroy quantity of items wanted</LI> <LI>Send new inventory list to player</LI>

*

* @param itemId : Identifier of the item

* @param count : Quantity of items to destroy

*/

public void takeItems(int itemId, int count)

{

// Get object item from player's inventory list

L2ItemInstance item = getPlayer().getInventory().getItemByItemId(itemId);

 

if(item == null)

return;

 

// Tests on count value in order not to have negative value

if(count < 0 || count > item.getCount())

{

count = item.getCount();

}

 

// Destroy the quantity of items wanted

if(itemId == 57)

{

getPlayer().reduceAdena("Quest", count, getPlayer(), true);

}

else

{

getPlayer().destroyItemByItemId("Quest", itemId, count, getPlayer(), true);

}

 

item = null;

}

 

/**

* Send a packet in order to play sound at client terminal

*

* @param sound

*/

public void playSound(String sound)

{

getPlayer().sendPacket(new PlaySound(sound));

}

 

/**

* Add XP and SP as quest reward

*

* @param exp

* @param sp

*/

public void addExpAndSp(int exp, int sp)

{

getPlayer().addExpAndSp((int) getPlayer().calcStat(Stats.EXPSP_RATE, exp * Config.RATE_QUESTS_REWARD, null, null), (int) getPlayer().calcStat(Stats.EXPSP_RATE, sp * Config.RATE_QUESTS_REWARD, null, null));

}

 

/**

* Return random value

*

* @param max : max value for randomisation

* @return int

*/

public int getRandom(int max)

{

return Rnd.get(max);

}

 

/**

* Return number of ticks from GameTimeController

*

* @return int

*/

public int getItemEquipped(int loc)

{

return getPlayer().getInventory().getPaperdollItemId(loc);

}

 

/**

* Return the number of ticks from the GameTimeController

*

* @return int

*/

public int getGameTicks()

{

return GameTimeController.getGameTicks();

}

 

/**

* Return true if quest is to exited on clean up by QuestStateManager

*

* @return boolean

*/

public final boolean isExitQuestOnCleanUp()

{

return _isExitQuestOnCleanUp;

}

 

/**

* Return the QuestTimer object with the specified name

*

* @return QuestTimer<BR>

* Return null if name does not exist

*/

public void setIsExitQuestOnCleanUp(boolean isExitQuestOnCleanUp)

{

_isExitQuestOnCleanUp = isExitQuestOnCleanUp;

}

 

/**

* Start a timer for quest.<BR>

* <BR>

*

* @param name<BR>

* The name of the timer. Will also be the value for event of onEvent

* @param time<BR>

* The milisecond value the timer will elapse

*/

public void startQuestTimer(String name, long time)

{

getQuest().startQuestTimer(name, time, null, getPlayer());

}

 

public void startQuestTimer(String name, long time, L2NpcInstance npc)

{

getQuest().startQuestTimer(name, time, npc, getPlayer());

}

 

/**

* Return the QuestTimer object with the specified name

*

* @return QuestTimer<BR>

* Return null if name does not exist

*/

public final QuestTimer getQuestTimer(String name)

{

return getQuest().getQuestTimer(name, null, getPlayer());

}

 

/**

* Add spawn for player instance Return object id of newly spawned npc

*/

public L2NpcInstance addSpawn(int npcId)

{

return addSpawn(npcId, getPlayer().getX(), getPlayer().getY(), getPlayer().getZ(), 0, false, 0);

}

 

public L2NpcInstance addSpawn(int npcId, int despawnDelay)

{

return addSpawn(npcId, getPlayer().getX(), getPlayer().getY(), getPlayer().getZ(), 0, false, despawnDelay);

}

 

public L2NpcInstance addSpawn(int npcId, int x, int y, int z)

{

return addSpawn(npcId, x, y, z, 0, false, 0);

}

 

/**

* Add spawn for player instance Will despawn after the spawn length expires Uses player's coords and heading. Adds

* a little randomization in the x y coords Return object id of newly spawned npc

*/

public L2NpcInstance addSpawn(int npcId, L2Character cha)

{

return addSpawn(npcId, cha, true, 0);

}

 

public L2NpcInstance addSpawn(int npcId, L2Character cha, int despawnDelay)

{

return addSpawn(npcId, cha.getX(), cha.getY(), cha.getZ(), cha.getHeading(), true, despawnDelay);

}

 

/**

* Add spawn for player instance Will despawn after the spawn length expires Return object id of newly spawned npc

*/

public L2NpcInstance addSpawn(int npcId, int x, int y, int z, int despawnDelay)

{

return addSpawn(npcId, x, y, z, 0, false, despawnDelay);

}

 

/**

* Add spawn for player instance Inherits coords and heading from specified L2Character instance. It could be either

* the player, or any killed/attacked mob Return object id of newly spawned npc

*/

public L2NpcInstance addSpawn(int npcId, L2Character cha, boolean randomOffset, int despawnDelay)

{

return addSpawn(npcId, cha.getX(), cha.getY(), cha.getZ(), cha.getHeading(), randomOffset, despawnDelay);

}

 

/**

* Add spawn for player instance Return object id of newly spawned npc

*/

public L2NpcInstance addSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffset, int despawnDelay)

{

return getQuest().addSpawn(npcId, x, y, z, heading, randomOffset, despawnDelay);

}

 

public String showHtmlFile(String fileName)

{

return getQuest().showHtmlFile(getPlayer(), fileName);

}

 

/**

* Destroy element used by quest when quest is exited

*

* @param repeatable

* @return QuestState

*/

public QuestState exitQuest(boolean repeatable)

{

if(isCompleted())

return this;

 

// Say quest is completed

_isCompleted = true;

 

// Clean registered quest items

FastList<Integer> itemIdList = getQuest().getRegisteredItemIds();

if(itemIdList != null)

{

for(FastList.Node<Integer> n = itemIdList.head(), end = itemIdList.tail(); (n = n.getNext()) != end;)

{

takeItems(n.getValue().intValue(), -1);

}

}

 

// If quest is repeatable, delete quest from list of quest of the player and from database (quest CAN be created again => repeatable)

if(repeatable)

{

getPlayer().delQuestState(getQuestName());

Quest.deleteQuestInDb(this);

 

_vars = null;

}

else

{

// Otherwise, delete variables for quest and update database (quest CANNOT be created again => not repeatable)

if(_vars != null)

{

for(String var : _vars.keySet())

{

unset(var);

}

}

 

Quest.updateQuestInDb(this);

}

 

itemIdList = null;

 

return this;

}

 

public void showQuestionMark(int number)

{

getPlayer().sendPacket(new TutorialShowQuestionMark(number));

}

 

public void playTutorialVoice(String voice)

{

getPlayer().sendPacket(new PlaySound(2, voice, 0, 0, getPlayer().getX(), getPlayer().getY(), getPlayer().getZ()));

}

 

public void showTutorialHTML(String html)

{

String text = HtmCache.getInstance().getHtm("data/scripts/quests/255_Tutorial/" + html);

 

if(text == null)

{

_log.warn("missing html page data/scripts/quests/255_Tutorial/" + html);

text = "<html><body>File data/scripts/quests/255_Tutorial/" + html + " not found or file is empty.</body></html>";

}

 

getPlayer().sendPacket(new TutorialShowHtml(text));

text = null;

}

 

public void closeTutorialHtml()

{

getPlayer().sendPacket(new TutorialCloseHtml());

}

 

public void onTutorialClientEvent(int number)

{

getPlayer().sendPacket(new TutorialEnableClientEvent(number));

}

 

public void dropItem(L2MonsterInstance npc, L2PcInstance player, int itemId, int count)

{

npc.DropItem(player, itemId, count);

}

}

 

 

 

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


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

опишите суть вопроса или проблемы если можно в ЛС , сурс скачал завтра гляну

Отпишу, спасибо заранее

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


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

Есть сборка скория и аналогичная (l2jfrozen)

Скопировал часть кода которая по моему мнению отвечает за задержку.

Код:

 

 

if(itemCount > 0)

{

// if over neededCount, just fill the gap

if(neededCount > 0 && currentCount + itemCount > neededCount)

{

itemCount = neededCount - currentCount;

}

 

// Inventory slot check

if(!getPlayer().getInventory().validateCapacityByItemId(itemId))

return false;

 

//just wait 3-5 seconds before the drop

try

{

Thread.sleep(Rnd.get(3, 5)*1000);

}

catch(InterruptedException e)

{

}

 

// Give the item to Player

getPlayer().addItem("Quest", itemId, itemCount, getPlayer().getTarget(), true);

 

if(sound)

{

playSound(currentCount + itemCount < neededCount ? "Itemsound.quest_itemget" : "Itemsound.quest_middle");

}

}

 

 

 

до редактирования:

 

 

if(itemCount > 0)

{

// if over neededCount, just fill the gap

if(neededCount > 0 && currentCount + itemCount > neededCount)

{

itemCount = neededCount - currentCount;

}

 

// Inventory slot check

if(!getPlayer().getInventory().validateCapacityByItemId(itemId))

return false;

 

// Give the item to Player

getPlayer().addItem("Quest", itemId, itemCount, getPlayer().getTarget(), true);

 

if(sound)

{

playSound(currentCount + itemCount < neededCount ? "Itemsound.quest_itemget" : "Itemsound.quest_middle");

}

}

 

 

 

 

Но это не работает, подскажите в чем моя ошибка?

Честное слово, руки бы отрывать тем, кто такое пишет и так делает задержки...

 

приспичило что-то сделать с определенной задержкой - юзай Future/ScheduledFuture

Изменено пользователем Gaikotsu
  • Upvote 1

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

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

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

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