35 m_walkLockExpiration = 0;
37 m_skillsLevel.fill(-1);
38 m_skillsBaseLevel.fill(-1);
39 m_skillsLevelPercent.fill(-1);
50 m_magicLevelPercent = -1;
51 m_baseMagicLevel = -1;
55 m_regenerationTime = -1;
56 m_offlineTrainingTime = -1;
72 if(m_walkLockExpiration != 0 &&
g_clock.
millis() < m_walkLockExpiration)
91 if(newPos == m_lastPrewalkDestination) {
99 m_serverWalking =
true;
100 if(m_serverWalkEndEvent)
101 m_serverWalkEndEvent->
cancel();
118 if(m_serverWalkEndEvent)
119 m_serverWalkEndEvent->
cancel();
122 m_lastPrewalkDestination = newPos;
134 if(m_autoWalkDestination.
isValid()) {
137 if(m_autoWalkContinueEvent) {
138 m_autoWalkContinueEvent->
cancel();
143 if(self->m_autoWalkDestination.isValid()) {
144 self->autoWalk(self->m_autoWalkDestination);
161 bool tryKnownPath =
false;
162 if(destination != m_autoWalkDestination) {
163 m_knownCompletePath =
false;
168 std::vector<Otc::Direction> limitedPath;
174 if(tryKnownPath || m_knownCompletePath) {
177 limitedPath = std::get<0>(result);
179 if(limitedPath.size() > 127)
180 limitedPath.resize(127);
181 m_knownCompletePath =
true;
186 if(limitedPath.empty()) {
195 for(
auto dir : std::get<0>(result)) {
199 limitedPath.push_back(dir);
203 m_autoWalkDestination = destination;
221 m_lastAutoWalkPosition =
Position();
222 m_knownCompletePath =
false;
224 if(m_autoWalkContinueEvent)
225 m_autoWalkContinueEvent->
cancel();
232 m_lastPrewalkDestination =
Position();
259 m_preWalking =
false;
261 if(m_serverWalking) {
262 if(m_serverWalkEndEvent)
263 m_serverWalkEndEvent->
cancel();
267 self->m_serverWalking =
false;
287 if(newPos == m_autoWalkDestination)
289 else if(m_autoWalkDestination.
isValid() && newPos == m_lastAutoWalkPosition)
295 if(m_states != states) {
296 const int oldStates = m_states;
306 g_logger.traceError(
"invalid skill");
310 const int oldLevel = m_skillsLevel[skill];
311 const int oldLevelPercent = m_skillsLevelPercent[skill];
313 if(level != oldLevel || levelPercent != oldLevelPercent) {
314 m_skillsLevel[skill] = level;
315 m_skillsLevelPercent[skill] = levelPercent;
317 callLuaField(
"onSkillChange", skill, level, levelPercent, oldLevel, oldLevelPercent);
324 g_logger.traceError(
"invalid skill");
328 const int oldBaseLevel = m_skillsBaseLevel[skill];
329 if(baseLevel != oldBaseLevel) {
330 m_skillsBaseLevel[skill] = baseLevel;
332 callLuaField(
"onBaseSkillChange", skill, baseLevel, oldBaseLevel);
338 if(m_health != health || m_maxHealth != maxHealth) {
339 const double oldHealth = m_health;
340 const double oldMaxHealth = m_maxHealth;
342 m_maxHealth = maxHealth;
344 callLuaField(
"onHealthChange", health, maxHealth, oldHealth, oldMaxHealth);
357 if(m_freeCapacity != freeCapacity) {
358 const double oldFreeCapacity = m_freeCapacity;
359 m_freeCapacity = freeCapacity;
361 callLuaField(
"onFreeCapacityChange", freeCapacity, oldFreeCapacity);
367 if(m_totalCapacity != totalCapacity) {
368 const double oldTotalCapacity = m_totalCapacity;
369 m_totalCapacity = totalCapacity;
371 callLuaField(
"onTotalCapacityChange", totalCapacity, oldTotalCapacity);
377 if(m_experience != experience) {
378 const double oldExperience = m_experience;
379 m_experience = experience;
381 callLuaField(
"onExperienceChange", experience, oldExperience);
387 if(m_level != level || m_levelPercent != levelPercent) {
388 const double oldLevel = m_level;
389 const double oldLevelPercent = m_levelPercent;
391 m_levelPercent = levelPercent;
393 callLuaField(
"onLevelChange", level, levelPercent, oldLevel, oldLevelPercent);
399 if(m_mana != mana || m_maxMana != maxMana) {
400 const double oldMana = m_mana;
405 callLuaField(
"onManaChange", mana, maxMana, oldMana, oldMaxMana);
414 if(m_magicLevel != magicLevel || m_magicLevelPercent != magicLevelPercent) {
415 const double oldMagicLevel = m_magicLevel;
416 const double oldMagicLevelPercent = m_magicLevelPercent;
417 m_magicLevel = magicLevel;
418 m_magicLevelPercent = magicLevelPercent;
420 callLuaField(
"onMagicLevelChange", magicLevel, magicLevelPercent, oldMagicLevel, oldMagicLevelPercent);
426 if(m_baseMagicLevel != baseMagicLevel) {
427 const double oldBaseMagicLevel = m_baseMagicLevel;
428 m_baseMagicLevel = baseMagicLevel;
430 callLuaField(
"onBaseMagicLevelChange", baseMagicLevel, oldBaseMagicLevel);
437 const double oldSoul = m_soul;
446 if(m_stamina != stamina) {
447 const double oldStamina = m_stamina;
457 g_logger.traceError(
"invalid slot");
461 if(m_inventoryItems[inventory] != item) {
462 const ItemPtr oldItem = m_inventoryItems[inventory];
463 m_inventoryItems[inventory] = item;
465 callLuaField(
"onInventoryChange", inventory, item, oldItem);
471 if(m_vocation != vocation) {
472 const int oldVocation = m_vocation;
473 m_vocation = vocation;
475 callLuaField(
"onVocationChange", vocation, oldVocation);
481 if(m_premium != premium) {
490 if(m_regenerationTime != regenerationTime) {
491 const double oldRegenerationTime = m_regenerationTime;
492 m_regenerationTime = regenerationTime;
494 callLuaField(
"onRegenerationChange", regenerationTime, oldRegenerationTime);
500 if(m_offlineTrainingTime != offlineTrainingTime) {
501 const double oldOfflineTrainingTime = m_offlineTrainingTime;
502 m_offlineTrainingTime = offlineTrainingTime;
504 callLuaField(
"onOfflineTrainingChange", offlineTrainingTime, oldOfflineTrainingTime);
510 if(m_spells != spells) {
511 const std::vector<int> oldSpells = m_spells;
520 if(blessings != m_blessings) {
521 const int oldBlessings = m_blessings;
522 m_blessings = blessings;
524 callLuaField(
"onBlessingsChange", blessings, oldBlessings);