5.1 KiB
Skill Cast Blocking During Flash Move - Log Analysis
Location of Skill Cast Cancellation
Based on analysis of EC.log, here's where skill casting is blocked/cancelled when the character is performing a flash move:
Key Finding: Blocking Location
Line 16548 in EC.log:
[10:57:02.992] <!> [SKILL_CAST_DEBUG] ApplySkillShortcut: BLOCKED - CanDo(CANDO_SPELLMAGIC) returned false, skillID=1
Context:
- Flash move is active: Line 16546 shows
WORK_FLASHMOVE(ID:14)running atPRIORITY_2 - Skill casting attempt: Player tries to cast skill ID=1
- Blocking point: The check
CanDo(CANDO_SPELLMAGIC)returnsfalseduring flash move - Result: Skill casting is blocked before it even reaches
CanCastSkillImmediately()check
Complete Blocking Sequence
1. Flash Move Starts
Line 15110:
[10:56:58.297] <!> 217:30:7:385 CECHPWork::WORK_FLASHMOVE started, priority=2
2. Flash Move Active (Multiple Confirmations)
Lines 15114-15298:
[10:56:58.308] <!> [SKILL_CAST_DEBUG] HasWorkRunningOnPriority: priority=2, result=1, currentPriority=2, WorkIDs=[WORK_FLASHMOVE(ID:14)]
(Repeated many times, confirming flash move is running)
3. Skill Casting Attempt During Flash Move
Line 16548:
[10:57:02.992] <!> [SKILL_CAST_DEBUG] ApplySkillShortcut: BLOCKED - CanDo(CANDO_SPELLMAGIC) returned false, skillID=1
Just before blocking (Line 16546):
[10:57:02.978] <!> [SKILL_CAST_DEBUG] HasWorkRunningOnPriority: priority=2, result=1, currentPriority=2, WorkIDs=[WORK_FLASHMOVE(ID:14)]
Blocking Mechanism
The blocking happens at TWO levels:
Level 1: Early Block (CanDo Check)
- Location:
ApplySkillShortcut()method - Check:
CanDo(CANDO_SPELLMAGIC) - When: Before entering main casting path
- Why: Flash move disables spell magic capability
- Result: Skill casting blocked immediately
Level 2: Priority Check (CanCastSkillImmediately)
- Location:
CanCastSkillImmediately()method - Check:
!IsSpellingMagic() && !HasWorkRunningOnPriority(PRIORITY_2) - When: After entering main casting path (if Level 1 passes)
- Why: Any work at PRIORITY_2 blocks skill casting
- Result: Additional blocking layer
Note: In the log, we see Level 1 blocking (CanDo check), which happens before Level 2. This is the first line of defense.
Log Evidence Summary
Successful Skill Cast (No Flash Move)
Lines 15046-15056:
[10:56:58.163] <!> [SKILL_CAST_DEBUG] ApplySkillShortcut: Entering main casting path, skillID=58, ...
[10:56:58.163] <!> [SKILL_CAST_DEBUG] CanCastSkillImmediately: skillID=58, IsSpellingMagic=0, HasWorkOnPriority2=0, WorkAtPriority2=[], result=1
[10:56:58.163] <!> [SKILL_CAST_DEBUG] ApplySkillShortcut: Setting prep skill and calling CastSkill, skillID=58
[10:56:58.163] <!> [SKILL_CAST_DEBUG] CastSkill: Entry, skillID=58, idTarget=1090, IsSpellingMagic=0
✅ Result: Skill casts successfully (no flash move active)
Blocked Skill Cast (During Flash Move)
Lines 16546-16548:
[10:57:02.978] <!> [SKILL_CAST_DEBUG] HasWorkRunningOnPriority: priority=2, result=1, currentPriority=2, WorkIDs=[WORK_FLASHMOVE(ID:14)]
[10:57:02.992] <!> [SKILL_CAST_DEBUG] ApplySkillShortcut: BLOCKED - CanDo(CANDO_SPELLMAGIC) returned false, skillID=1
❌ Result: Skill casting blocked (flash move active)
How to Read the Logs
Step 1: Find Flash Move Start
Search for:
WORK_FLASHMOVE started
Step 2: Confirm Flash Move is Active
Look for repeated entries:
HasWorkRunningOnPriority: priority=2, result=1, WorkIDs=[WORK_FLASHMOVE(ID:14)]
Step 3: Find Skill Casting Attempt
Search for:
ApplySkillShortcut: BLOCKED
or
ApplySkillShortcut: Entering main casting path
Step 4: Check Blocking Reason
- Early block:
BLOCKED - CanDo(CANDO_SPELLMAGIC) returned false - Priority block:
CanCastSkillImmediately: ... result=0(if it reaches this check)
Key Insights
- Flash move disables spell magic capability - This is why
CanDo(CANDO_SPELLMAGIC)returns false - Blocking happens early - Before
CanCastSkillImmediately()is even called - Work system priority - Flash move runs at
PRIORITY_2, which blocks skill casting - Silent blocking - No error message, skill just doesn't cast (C++ behavior)
Code Flow
ApplySkillShortcut()
↓
CanDo(CANDO_SPELLMAGIC) check
↓ (if false → BLOCKED, return false)
↓ (if true → continue)
Enter main casting path
↓
CanCastSkillImmediately() check
↓ (if false → BLOCKED, return false)
↓ (if true → continue)
CastSkill()
In the log: Blocking happens at the first check (CanDo), so we never see CanCastSkillImmediately being called during flash move in this particular case.
Conclusion
The skill cast is cancelled/blocked at:
- Primary location:
ApplySkillShortcut()→CanDo(CANDO_SPELLMAGIC)check - Secondary location:
CanCastSkillImmediately()→HasWorkRunningOnPriority(PRIORITY_2)check - Log evidence: Line 16548 in EC.log shows the blocking message
- Reason: Flash move disables spell magic capability and runs at PRIORITY_2