Jump to content

Question

Posted

l2jfrozen-1004

 

Hello,

So there is a bug with melee attack ,when you exceed 1600 attack speed if you keep pressing the Attack button(F1) somehow bugs and is like 5000 attack speed.

I've noticed that when you move a little to the side of your opponent while pressing F1 then starts bugging

If you only hit F1 once it hits normally.

How can I fix this?

Recommended Posts

  • 0
Posted

that doesnt help me.I need a normal answer please. is there any way to add delay between attacks?

Update your files to latest

  • 0
Posted (edited)

I'm not familiar with l2jfrozen, so i have no idea why the others are suggesting you to update your files, but i believe this to be a client issue, in which case finding a way to fix would be really tough and would require modifying engine.dll

 

I could definetely be wrong, i have never checked IL client atk spd cap, but the bug you are describing sounds like that.

 

Edit: Seems like i was right, i don't see anything wrong with frozen files, should be client issue.

Edited by Versus
  • 0
Posted (edited)

I'm not familiar with l2jfrozen, so i have no idea why the others are suggesting you to update your files, but i believe this to be a client issue, in which case finding a way to fix would be really tough and would require modifying engine.dll

 

I could definetely be wrong, i have never checked IL client atk spd cap, but the bug you are describing sounds like that.

 

Edit: Seems like i was right, i don't see anything wrong with frozen files, should be client issue.

 

It's more a task issue ; task are never stored somewhere, so can't be retrieved to be canceled "in case of". It happens on few other places over L2J and is a common issue on old writting style (and as none decided to work on system such as MMOCore, movement, attack (,...) since litterally a decade, you got 10y old code maze).

 

If task system works as intented, it's a Intention issue. If Intention system works as intented :D.

Edited by Tryskell
  • 0
Posted

It's more a task issue ; task are never stored somewhere, so can't be retrieved to be canceled "in case of". It happens on few other places over L2J and is a common issue on old writting style (and as none decided to work on system such as MMOCore, movement, attack (,...) since litterally a decade, you got 10y old code maze).

 

If task system works as intented, it's a Intention issue. If Intention system works as intented :D.

Thanks for the explanation, didn't really look into this, i just somehow remembered hearing before this was client issue and checked the frozen attack time calculation method, which is the basic L2J one.

  • 0
Posted

Thank you for your answers.

 

On aCis you can do it as well.

 But on aCis if you click the floor to move he starts moving so the bug dont really work (ive tried)

 

So these are mmocore settings maybe change something from here?

#=========================================#
#   MMOCore Connection Settings           #
#=========================================#

# ---------------------------- #
#  Debug and Develop logging   #
# ---------------------------- #
EnableMMOCoreDebug = False
EnableMMOCoreDevelop = False
EnableMMOCoreExceptions = False
PacketHandlerDebug = False
# Don't ENABLE, just for debug use
DumpCloseConnectionLogs = False

# ----------------------------
#  Config BackLog -
# ----------------------------
# Maximum length of request.
# The maximum length for incoming requests (connection request).
# Maximum number of requests, after which the requests
# Will not be accepted.
# The default is 50
# Must be equal to the estimated number of players.
# Example: Players in the game 1000 +, NetworkBackLog = 1000 
# NetworkBackLog = 50

# ----------------
#  Set TOS -
# ----------------
# Set the traffic going to a particular socket.
# Can be ignored JAVA-machine.
# Range: 0 <= tc <= 255 or a ban happens.
# Note:
# To TCP4 should be set high priority and should be RFC 1349.
# You can also create a type priorities bit, example:
# IPTOS_LOWCOST (0x02)
# IPTOS_RELIABILITY (0x04)
# IPTOS_THROUGHPUT (0x08)
# IPTOS_LOWDELAY (0x10)
# The lowest bit is ignored (0).
# Set bits in the priority may cause the collapse of the server.
# depends on the service and platform.
# Note:
# Applications can not change GameServer after connecting.
# To TCP6 value can be found in the header sin6_flowinfo.
# NetworkIpTOS = 0

# ---------------------------------------
#  Setting TCP_NODELAY -
# ---------------------------------------
# On / Off TCP_NODELAY
#NetworkTcpNoDelay = False

# -------------------------------
#  Setting KeepAlive -
# -------------------------------
# On / Off SO_KEEPALIVE
#NetworkKeepAlive = False

# ------------------------
#  Set a timeout -
# ------------------------
# Set a timeout in milliseconds.
# If set to 0, the timeout will be standard.
# Timeout must be greater than 0.
# Zero timeout is defined as an infinite timeout. 
#NetworkSoTimeOut = 0

# ---------------------------------------------------
#  Configure repetitions Adresses -
# ---------------------------------------------------
# On / Off option.
# If the connection is closed, then turn timeout.
#NetworkSoReuseAddr = True

# --------------------------------------
#  Set buffer compounds -
# --------------------------------------
# Buffer size in kbit (kilobits)
# By default (Windows) - 64KBits
# Default (* nix) - 128KBits
#NetworkReadBufferSize = 64
#NetworkWriteBufferSize = 64
#NetworkHelperBufferSize = 64

# The size of the auxiliary buffer
#NetworkHelperBufferCount = 20
					
# --------------------------
# Client Queue Configuration
# --------------------------
# Queue size, do not set it too low !
# Default: 14
ClientPacketQueueSize=14
# Maximum number of packets in burst.
# Execution will be aborted and thread released if more packets executed in raw.
# Default: 50
ClientPacketQueueMaxBurstSize=50
# Maximum number of packets per second.
# Flood detector will be triggered if more packets received.
# After triggering all incoming packets will be dropped until flooding stopped.
# Default: 80
ClientPacketQueueMaxPacketsPerSecond=80
# Average number of packets per second calculated during this interval.
# Using larger value decrease number of false kicks, but slower reaction to flood.
# Avoid using too low or too high values, recommended between 3 and 10.
# Default: 5
ClientPacketQueueMeasureInterval=5
# Maximum average number of packets per second during measure interval.
# Flood detector will be triggered if more packets received.
# After triggering all incoming packets will be dropped until flooding stopped.
# Default: 40
ClientPacketQueueMaxAveragePacketsPerSecond=40
# Maximum number of flood triggers per minute.
# Client will be kicked if more floods detected.
# Default: 2
ClientPacketQueueMaxFloodPerMin=6
# Maximum number of queue overflows per minute.
# After overflow all incoming packets from client are dropped until queue is flushed.
# Client will be kicked if more queue overflows detected.
# Default: 50
ClientPacketQueueOverflowsPerMin=50
# Maximum number of buffer underflows per minute.
# Client will be kicked if more underflow exceptions detected.
# Default: 1
ClientPacketQueueUnderflowsPerMin=1
# Maximum number of unknown packets per minute.
# Client will be kicked if more unknown packets received.
# Default: 5
ClientPacketQueueUnknownPerMin = 5

# --------------------------
# Food Packets Protections -
# --------------------------
# Interval - interval in gameserver ticks (1 tick = 100ms) in which only one request is allowed
# LogFlooding - whether flooding should be logged (only first occurrence of flooding and total count of flood requests is logged)
# PunishmentLimit - if number of requests within single interval exceeds specified number then the specified punishment is applied (0 = disables punishment feature)
# PunishmentType - type of the punishment ('none', 'kick', 'ban'), valid only if PunishmentLimit is greater than 0

# Flood protection method: check if in given FLOOD_PROTECTION_INTERVAL 
# more then PUNISHMENT_LIMIT actions are performed: if this condition has been verified
# apply PUNISHMENT_TYPE for PUNISHMENT_TIME minutes
DisableOpCodesFloodProtector = False
FloodPacketProtectionInterval = 1
LogPacketFlooding = False
PacketFloodingPunishmentLimit = 20
PacketFloodingPunishmentType = kick

# -- GAME SERVER -- 
#
# OPCODE1
# --  opcode1 0x00: ProtocolVersion();
# --  opcode1 0x08: AuthLogin();
# --  opcode1 0x09: Logout();
# --  opcode1 0x0b: CharacterCreate();
# --  opcode1 0x0c: CharacterDelete();
# --  opcode1 0x0d: CharacterSelected();
# --  opcode1 0x0e: NewCharacter();
# --  opcode1 0x62: CharacterRestore();
# --  opcode1 0x68: RequestPledgeCrest();
# --  opcode1 0x01: MoveBackwardToLocation();
# --  opcode1 0x02: // Say  ... not used any more ??
# --  opcode1 0x03: EnterWorld();
# --  opcode1 0x04: Action();
# --  opcode1 0x09: Logout();
# --  opcode1 0x0a: AttackRequest();
# --  opcode1 0x0f: RequestItemList();
# --  opcode1 0x10: // RequestEquipItem ... not used any more, instead "useItem"
# --  opcode1 0x11: RequestUnEquipItem();
# --  opcode1 0x12: RequestDropItem();
# --  opcode1 0x14: UseItem();
# --  opcode1 0x15: TradeRequest();
# --  opcode1 0x16: AddTradeItem();
# --  opcode1 0x17: TradeDone();
# --  opcode1 0x1a: DummyPacket();
# --  opcode1 0x1b: RequestSocialAction();
# --  opcode1 0x1c: ChangeMoveType2();
# --  opcode1 0x1d: ChangeWaitType2();
# --  opcode1 0x1e: RequestSellItem();
# --  opcode1 0x1f: RequestBuyItem();
# --  opcode1 0x20: RequestLinkHtml();
# --  opcode1 0x21: RequestBypassToServer();
# --  opcode1 0x22: RequestBBSwrite();
# --  opcode1 0x23: DummyPacket();
# --  opcode1 0x24: RequestJoinPledge();
# --  opcode1 0x25: RequestAnswerJoinPledge();
# --  opcode1 0x26: RequestWithdrawalPledge();
# --  opcode1 0x27: RequestOustPledgeMember();
# --  opcode1 0x28: // RequestDismissPledge
# --  opcode1 0x29: RequestJoinParty();
# --  opcode1 0x2a: RequestAnswerJoinParty();
# --  opcode1 0x2b: RequestWithDrawalParty();
# --  opcode1 0x2c: RequestOustPartyMember();
# --  opcode1 0x2d: // RequestDismissParty
# --  opcode1 0x2e: DummyPacket();
# --  opcode1 0x2f: RequestMagicSkillUse();
# --  opcode1 0x30: Appearing(); //  (after death)
# --  opcode1 0x31: SendWareHouseDepositList();
# --  opcode1 0x32: SendWareHouseWithDrawList();
# --  opcode1 0x33: RequestShortCutReg();
# --  opcode1 0x34: DummyPacket();
# --  opcode1 0x35: RequestShortCutDel();
# --  opcode1 0x36: CannotMoveAnymore();
# --  opcode1 0x37: RequestTargetCanceld();
# --  opcode1 0x38: Say2();
# --  opcode1 0x3c: RequestPledgeMemberList();
# --  opcode1 0x3e: DummyPacket();
# --  opcode1 0x3f: RequestSkillList();
# --  opcode1 0x41: MoveWithDelta(); // MoveWithDelta    ... unused ?? or only on ship ??
# --  opcode1 0x42: RequestGetOnVehicle();
# --  opcode1 0x43: RequestGetOffVehicle();
# --  opcode1 0x44: AnswerTradeRequest();
# --  opcode1 0x45: RequestActionUse();
# --  opcode1 0x46: RequestRestart();
# --  opcode1 0x47: RequestSiegeInfo();
# --  opcode1 0x48: ValidatePosition();
# --  opcode1 0x49: // RequestSEKCustom
# --  opcode1 0x4a: //new StartRotating();
# --  opcode1 0x4b: //new FinishRotating();
# --  opcode1 0x4d: RequestStartPledgeWar();
# --  opcode1 0x4e: RequestReplyStartPledgeWar();
# --  opcode1 0x4f: RequestStopPledgeWar();
# --  opcode1 0x50: RequestReplyStopPledgeWar();
# --  opcode1 0x51: RequestSurrenderPledgeWar();
# --  opcode1 0x52: RequestReplySurrenderPledgeWar();
# --  opcode1 0x53: RequestSetPledgeCrest();
# --  opcode1 0x55: RequestGiveNickName();
# --  opcode1 0x57: RequestShowBoard();
# --  opcode1 0x58: RequestEnchantItem();
# --  opcode1 0x59: RequestDestroyItem();
# --  opcode1 0x5b: SendBypassBuildCmd();
# --  opcode1 0x5c: RequestMoveToLocationInVehicle();
# --  opcode1 0x5d: CannotMoveAnymoreInVehicle();
# --  opcode1 0x5e: RequestFriendInvite();
# --  opcode1 0x5f: RequestAnswerFriendInvite();
# --  opcode1 0x60: RequestFriendList();
# --  opcode1 0x61: RequestFriendDel();
# --  opcode1 0x63: RequestQuestList();
# --  opcode1 0x64: RequestQuestAbort();
# --  opcode1 0x66: RequestPledgeInfo();
# --  opcode1 0x67: RequestPledgeExtendedInfo();
# --  opcode1 0x68: RequestPledgeCrest();
# --  opcode1 0x69: RequestSurrenderPersonally();
# --  opcode1 0x6a: // Ride
# --  opcode1 0x6b: // send when talking to trainer npc, to show list of available skills, RequestAquireSkillInfo();//  --> [s] 0xa4;
# --  opcode1 0x6c: // send when a skill to be learned is selected, RequestAquireSkill();
# --  opcode1 0x6d: RequestRestartPoint();
# --  opcode1 0x6e: RequestGMCommand();
# --  opcode1 0x6f: RequestPartyMatchList();
# --  opcode1 0x70: RequestPartyMatchConfig();
# --  opcode1 0x71:  RequestPartyMatchDetail();
# --  opcode1 0x72: RequestCrystallizeItem();
# --  opcode1 0x73: RequestPrivateStoreManageSell();
# --  opcode1 0x74: SetPrivateStoreListSell();
# --  opcode1 0x75: //RequestPrivateStoreManageCancel(data, _client);
# --  opcode1 0x76: RequestPrivateStoreQuitSell();
# --  opcode1 0x77: SetPrivateStoreMsgSell();
# --  opcode1 0x78: // RequestPrivateStoreList
# --  opcode1 0x79: RequestPrivateStoreBuy();
# --  opcode1 0x7a: // ReviveReply
# --  opcode1 0x7b: RequestTutorialLinkHtml();
# --  opcode1 0x7c: RequestTutorialPassCmdToServer();
# --  opcode1 0x7d: RequestTutorialQuestionMark();
# --  opcode1 0x7e: RequestTutorialClientEvent();
# --  opcode1 0x7f: RequestPetition();
# --  opcode1 0x80: RequestPetitionCancel();
# --  opcode1 0x81: RequestGmList();
# --  opcode1 0x82: RequestJoinAlly();
# --  opcode1 0x83: RequestAnswerJoinAlly();
# --  opcode1 0x84: AllyLeave();
# --  opcode1 0x85: AllyDismiss();
# --  opcode1 0x86: RequestDismissAlly();
# --  opcode1 0x87: RequestSetAllyCrest();
# --  opcode1 0x88: RequestAllyCrest();
# --  opcode1 0x89: RequestChangePetName();
# --  opcode1 0x8a: RequestPetUseItem();
# --  opcode1 0x8b: RequestGiveItemToPet();
# --  opcode1 0x8c: RequestGetItemFromPet();
# --  opcode1 0x8e: RequestAllyInfo();
# --  opcode1 0x8f: RequestPetGetItem();
# --  opcode1 0x90: RequestPrivateStoreManageBuy();
# --  opcode1 0x91: SetPrivateStoreListBuy();
# --  opcode1 0x92: // RequestPrivateStoreBuyManageCancel
# --  opcode1 0x93: RequestPrivateStoreQuitBuy();
# --  opcode1 0x94: SetPrivateStoreMsgBuy();
# --  opcode1 0x95: // RequestPrivateStoreBuyList
# --  opcode1 0x96: RequestPrivateStoreSell();
# --  opcode1 0x97: // SendTimeCheckPacket
# --  opcode1 0x98: // RequestStartAllianceWar
# --  opcode1 0x99: // ReplyStartAllianceWar
# --  opcode1 0x9a: // RequestStopAllianceWar
# --  opcode1 0x9b: // ReplyStopAllianceWar
# --  opcode1 0x9c: // RequestSurrenderAllianceWar
# --  opcode1 0x9d: // RequestSkillCoolTime
# --  opcode1 0x9e: RequestPackageSendableItemList();
# --  opcode1 0x9f: RequestPackageSend();
# --  opcode1 0xa0: RequestBlock();
# --  opcode1 0xa1: // RequestCastleSiegeInfo
# --  opcode1 0xa2: RequestSiegeAttackerList();
# --  opcode1 0xa3: RequestSiegeDefenderList();
# --  opcode1 0xa4: RequestJoinSiege();
# --  opcode1 0xa5: RequestConfirmSiegeWaitingList();
# --  opcode1 0xa6: // RequestSetCastleSiegeTime
# --  opcode1 0xa7: MultiSellChoose();
# --  opcode1 0xa8: // NetPing
# --  opcode1 0xaa: RequestUserCommand();
# --  opcode1 0xab: SnoopQuit();
# --  opcode1 0xac: RequestRecipeBookOpen(); // we still need this packet to handle BACK button of craft dialog,
# --  opcode1 0xad: RequestRecipeBookDestroy();
# --  opcode1 0xae: RequestRecipeItemMakeInfo();
# --  opcode1 0xaf: RequestRecipeItemMakeSelf();
# --  opcode1 0xb0: // RequestRecipeShopManageList(data, client);
# --  opcode1 0xb1: RequestRecipeShopMessageSet();
# --  opcode1 0xb2: RequestRecipeShopListSet();
# --  opcode1 0xb3: RequestRecipeShopManageQuit();
# --  opcode1 0xb4: SnoopQuit();
# --  opcode1 0xb5: RequestRecipeShopMakeInfo();
# --  opcode1 0xb6: RequestRecipeShopMakeItem();
# --  opcode1 0xb7: RequestRecipeShopManagePrev();
# --  opcode1 0xb8: ObserverReturn();
# --  opcode1 0xb9: RequestEvaluate();
# --  opcode1 0xba: RequestHennaList();
# --  opcode1 0xbb: RequestHennaItemInfo();
# --  opcode1 0xbc: RequestHennaEquip();
# --  opcode1 0xc0: RequestPledgePower();
# --  opcode1 0xc1: RequestMakeMacro();
# --  opcode1 0xc2: RequestDeleteMacro();
# --  opcode1 0xc3: RequestBuyProcure();
# --  opcode1 0xc4: RequestBuySeed();
# --  opcode1 0xc5: DlgAnswer();
# --  opcode1 0xc6: RequestWearItem();
# --  opcode1 0xc7: RequestSSQStatus();
# --  opcode1 0xCA: GameGuardReply();
# --  opcode1 0xcc: RequestSendFriendMsg();
# --  opcode1 0xcd: RequestShowMiniMap();
# --  opcode1 0xce: // MSN dialogs so that you dont see them in the console.
# --  opcode1 0xcf: RequestRecordInfo();//record video
# --  opcode1 0xee:  RequestChangePartyLeader();
# --  opcode1 0xd0:
#
#	OPCODE2 (just if opcode1 == 0xd0)
#       --  opcode2 1: RequestOustFromPartyRoom();
#       --  opcode2 2: RequestDismissPartyRoom();
#       --  opcode2 3: RequestWithdrawPartyRoom();
#       --  opcode2 4: RequestChangePartyLeader();
#       --  opcode2 5: RequestAutoSoulShot();
#       --  opcode2 6: RequestExEnchantSkillInfo();
#       --  opcode2 7: RequestExEnchantSkill();
#       --  opcode2 8: RequestManorList();
#       --  opcode2 9: RequestProcureCropList();
#       --  opcode2 0x0a: RequestSetSeed();
#       --  opcode2 0x0b: RequestSetCrop();
#       --  opcode2 0x0c: RequestWriteHeroWords();
#       --  opcode2 0x0d: RequestExAskJoinMPCC();
#       --  opcode2 0x0e: RequestExAcceptJoinMPCC();
#       --  opcode2 0x0f: RequestExOustFromMPCC();
#       --  opcode2 0x10: RequestExPledgeCrestLarge();
#       --  opcode2 0x11: RequestExSetPledgeCrestLarge();
#       --  opcode2 0x12: RequestOlympiadObserverEnd();
#       --  opcode2 0x13: RequestOlympiadMatchList();
#       --  opcode2 0x14: RequestAskJoinPartyRoom();
#       --  opcode2 0x15: AnswerJoinPartyRoom();
#       --  opcode2 0x16: RequestListPartyMatchingWaitingRoom();
#       --  opcode2 0x17: RequestExitPartyMatchingWaitingRoom();
#       --  opcode2 0x18: RequestGetBossRecord();
#       --  opcode2 0x19: RequestPledgeSetAcademyMaster();
#       --  opcode2 0x1a: RequestPledgePowerGradeList();
#       --  opcode2 0x1b: RequestPledgeMemberPowerInfo();
#       --  opcode2 0x1c: RequestPledgeSetMemberPowerGrade();
#       --  opcode2 0x1d: RequestPledgeMemberInfo();
#       --  opcode2 0x1e: RequestPledgeWarList();
#       --  opcode2 0x1f: RequestExFishRanking();
#       --  opcode2 0x20: RequestPCCafeCouponUse();
#       --  opcode2 0x22: RequestCursedWeaponList();
#       --  opcode2 0x23: RequestCursedWeaponLocation();
#       --  opcode2 0x24: RequestPledgeReorganizeMember();
#       --  opcode2 0x26: RequestExMPCCShowPartyMembersInfo();
#       --  opcode2 0x27: RequestDuelStart();
#       --  opcode2 0x28: RequestDuelAnswerStart();
#       --  opcode2 0x29: RequestConfirmTargetItem();
#       --  opcode2 0x2a: RequestConfirmRefinerItem();
#       --  opcode2 0x2b: RequestConfirmGemStone();
#       --  opcode2 0x2c: RequestRefine();
#       --  opcode2 0x2d: RequestConfirmCancelItem();
#       --  opcode2 0x2e: RequestRefineCancel();
#       --  opcode2 0x2f: RequestExMagicSkillUseGround();
#       --  opcode2 0x30: RequestDuelSurrender();

# -- LOGIN SERVER -- 
# 
# OPCODE1
#
# --  opcode1  0x07: AuthGameGuard();
# --  opcode1  0x00: RequestAuthLogin();
# --  opcode1  0x05: RequestServerList();
# --  opcode1  0x02: RequestServerLogin();

				
# List of not checked OPCODES ---> if server receive a Packet that has 
# OpCode into this protected list, it will not be checked by Flood Protector. 
# If you want disable check on a LoginServer OpCode, just provide into the
# list values as "L,OpCodeA;L,OpCodeB;....", meanwhile if you want to disable 
# check on a Gameserver Opcode, just provide into the list values as "G,OpCode1".
# If the Gameserver OpCode1 is 0xd0, you "can" specify which OpCode2 you want to
# allow, "G,0xd0,OpCode2A,OpCode2B...". If you want make something mixed, just
# provide mixed values: 
#
# Example ListOfProtectedOpCodes1=G,0x48;G,0x04;L,0x07;G,0xd0,0x0a;
#
# This means "allow my server to be flooded by ValidationPotiion Packets, Action Packets, 
# AuthGameGuard Packets and RequestSetSeed Packets" .
ListOfProtectedOpCodes=G,0x48;G,0x01;G,0x2f;G,0x0a;G,0x45;G,0x04;G,0x4a;G,0x4b;G,0x14;G,0x37;G,0x88;G,0x68;


# List of allowed "offline" OPCODES ---> if server receive a Packet that has not 
# OpCode into this protected list and Character is OFFLINE, it will not be elaborated and client connection is closed. 
# You "can" specify also OpCode2 you want to filter over main OpCode, e.g. "0xd0,OpCode2A,OpCode2B". 
# If you want make something mixed, just provide mixed values: 
#
# Example ListOfAllowedOfflineOpCodes=0x03;0x9d;0xd0,0x08;0x13;0x81;
#
ListOfAllowedOfflineOpCodes=0x03;0x9d;0xd0,0x08;0x13;0x81;0x0d;0x55;0xca;
  • 0
Posted

There's no easy way to fix this (changing a config, etc), read tryskell's post, his explanation is more than enough and provides a solution as well.

  • 0
Posted

It's more a task issue ; task are never stored somewhere, so can't be retrieved to be canceled "in case of". It happens on few other places over L2J and is a common issue on old writting style (and as none decided to work on system such as MMOCore, movement, attack (,...) since litterally a decade, you got 10y old code maze).

 

If task system works as intented, it's a Intention issue. If Intention system works as intented :D.

But aren't those tasks queued? 

Do they just start when they are requested?

  • 0
Posted

But aren't those tasks queued? 

Do they just start when they are requested?

ThreadPool.schedule(new HitTask(target, damage1, crit1, miss1, attack.soulshot, shld1), sAtk);

There is atm no track of hits. You attack, you launch a task, but can't deny it.

 

----

		// Get the Attack Speed of the L2Character (delay (in milliseconds) before next attack)
		int timeAtk = calculateTimeBetweenAttacks(target, weaponItemType);
		_attackEndTime = System.currentTimeMillis() + timeAtk;

Probably provides wrong values, or is somehow bypassed clicking like a naab on feet.

  • 0
Posted
ThreadPool.schedule(new HitTask(target, damage1, crit1, miss1, attack.soulshot, shld1), sAtk);

There is atm no track of hits. You attack, you launch a task, but can't deny it.

 

----

		// Get the Attack Speed of the L2Character (delay (in milliseconds) before next attack)
		int timeAtk = calculateTimeBetweenAttacks(target, weaponItemType);
		_attackEndTime = System.currentTimeMillis() + timeAtk;

Probably provides wrong values, or is somehow bypassed clicking like a naab on feet.

 

Don't you think an action queue would be a better idea?

  • 0
Posted (edited)

Don't you think an action queue would be a better idea?

 

L2 needs only a single action as "queue", but atm it is based on Intention (cf : you run and sit when action ended, you cast a spell but continue to run, etc).

 

But yeah, basically the idea is from the moment the current action is running you can't do a shit.

Edited by Tryskell
Guest
This topic is now closed to further replies.


×
×
  • Create New...