Otclient 1.0  14/8/2020
localplayer.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2020 OTClient <https://github.com/edubart/otclient>
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20  * THE SOFTWARE.
21  */
22 
23 #include "localplayer.h"
26 #include "game.h"
27 #include "map.h"
28 #include "tile.h"
29 
31 {
32  m_states = 0;
33  m_vocation = 0;
34  m_blessings = Otc::BlessingNone;
35  m_walkLockExpiration = 0;
36 
37  m_skillsLevel.fill(-1);
38  m_skillsBaseLevel.fill(-1);
39  m_skillsLevelPercent.fill(-1);
40 
41  m_health = -1;
42  m_maxHealth = -1;
43  m_freeCapacity = -1;
44  m_experience = -1;
45  m_level = -1;
46  m_levelPercent = -1;
47  m_mana = -1;
48  m_maxMana = -1;
49  m_magicLevel = -1;
50  m_magicLevelPercent = -1;
51  m_baseMagicLevel = -1;
52  m_soul = -1;
53  m_stamina = -1;
54  m_baseSpeed = -1;
55  m_regenerationTime = -1;
56  m_offlineTrainingTime = -1;
57  m_totalCapacity = -1;
58 }
59 
61 {
62  m_walkLockExpiration = std::max<int>(m_walkLockExpiration, static_cast<ticks_t>(g_clock.millis()) + millis);
63 }
64 
66 {
67  // paralyzed
68  if(isParalyzed())
69  return false;
70 
71  // cannot walk while locked
72  if(m_walkLockExpiration != 0 && g_clock.millis() < m_walkLockExpiration)
73  return false;
74 
75  if(!isAutoWalking()) {
76  const int stepDuration = std::max<int>(getStepDuration(), g_game.getPing());
77  if(m_walkTimer.ticksElapsed() < stepDuration)
78  return false;
79  }
80 
81  return true;
82 }
83 
84 void LocalPlayer::walk(const Position& oldPos, const Position& newPos)
85 {
86  // a prewalk was going on
87  if(m_preWalking) {
88  // switch to normal walking
89  m_preWalking = false;
90  // if is to the last prewalk destination, updates the walk preserving the animation
91  if(newPos == m_lastPrewalkDestination) {
92  updateWalk();
93  // was to another direction, replace the walk
94  } else
95  Creature::walk(oldPos, newPos);
96  }
97  // no prewalk was going on, this must be an server side automated walk
98  else {
99  m_serverWalking = true;
100  if(m_serverWalkEndEvent)
101  m_serverWalkEndEvent->cancel();
102 
103  Creature::walk(oldPos, newPos);
104  }
105 }
106 
108 {
109  const Position newPos = m_position.translatedToDirection(direction);
110 
111  // avoid reanimating prewalks
112  if(m_preWalking) {
113  return;
114  }
115 
116  m_preWalking = true;
117 
118  if(m_serverWalkEndEvent)
119  m_serverWalkEndEvent->cancel();
120 
121  // start walking to direction
122  m_lastPrewalkDestination = newPos;
123  Creature::walk(m_position, newPos);
124 }
125 
127 {
128  // only cancel client side walks
129  if(m_walking && m_preWalking)
130  stopWalk();
131 
132  lockWalk();
133 
134  if(m_autoWalkDestination.isValid()) {
135  g_game.stop();
136 
137  if(m_autoWalkContinueEvent) {
138  m_autoWalkContinueEvent->cancel();
139  }
140 
141  auto self = asLocalPlayer();
142  m_autoWalkContinueEvent = g_dispatcher.scheduleEvent([self]() {
143  if(self->m_autoWalkDestination.isValid()) {
144  self->autoWalk(self->m_autoWalkDestination);
145  }
146  }, 1000);
147  }
148 
149  // turn to the cancel direction
150  if(direction != Otc::InvalidDirection)
151  setDirection(direction);
152 
153  callLuaField("onCancelWalk", direction);
154 }
155 
156 bool LocalPlayer::autoWalk(const Position& destination)
157 {
158  if(m_position.isInRange(destination, 1, 1))
159  return g_game.walk(m_position.getDirectionFromPosition(destination));
160 
161  bool tryKnownPath = false;
162  if(destination != m_autoWalkDestination) {
163  m_knownCompletePath = false;
164  tryKnownPath = true;
165  }
166 
167  std::tuple<std::vector<Otc::Direction>, Otc::PathFindResult> result;
168  std::vector<Otc::Direction> limitedPath;
169 
170  if(destination == m_position)
171  return true;
172 
173  // try to find a path that we know
174  if(tryKnownPath || m_knownCompletePath) {
175  result = g_map.findPath(m_position, destination, 50000, 0);
176  if(std::get<1>(result) == Otc::PathFindResultOk) {
177  limitedPath = std::get<0>(result);
178  // limit to 127 steps
179  if(limitedPath.size() > 127)
180  limitedPath.resize(127);
181  m_knownCompletePath = true;
182  }
183  }
184 
185  // no known path found, try to discover one
186  if(limitedPath.empty()) {
187  result = g_map.findPath(m_position, destination, 50000, Otc::PathFindAllowNotSeenTiles);
188  if(std::get<1>(result) != Otc::PathFindResultOk) {
189  callLuaField("onAutoWalkFail", std::get<1>(result));
190  stopAutoWalk();
191  return false;
192  }
193 
194  Position currentPos = m_position;
195  for(auto dir : std::get<0>(result)) {
196  currentPos = currentPos.translatedToDirection(dir);
197  if(!hasSight(currentPos))
198  break;
199  limitedPath.push_back(dir);
200  }
201  }
202 
203  m_autoWalkDestination = destination;
204  m_lastAutoWalkPosition = m_position.translatedToDirections(limitedPath).back();
205 
206  /*
207  // debug calculated path using minimap
208  for(auto pos : m_position.translatedToDirections(limitedPath)) {
209  g_map.getOrCreateTile(pos)->overwriteMinimapColor(215);
210  g_map.notificateTileUpdate(pos);
211  }
212  */
213 
214  g_game.autoWalk(limitedPath);
215  return true;
216 }
217 
219 {
220  m_autoWalkDestination = Position();
221  m_lastAutoWalkPosition = Position();
222  m_knownCompletePath = false;
223 
224  if(m_autoWalkContinueEvent)
225  m_autoWalkContinueEvent->cancel();
226 }
227 
229 {
230  Creature::stopWalk(); // will call terminateWalk
231 
232  m_lastPrewalkDestination = Position();
233 }
234 
235 void LocalPlayer::updateWalkOffset(int totalPixelsWalked)
236 {
237  if(!m_preWalking) {
238  Creature::updateWalkOffset(totalPixelsWalked);
239  return;
240  }
241 
242  // pre walks offsets are calculated in the oposite direction
243  m_walkOffset = Point(0, 0);
245  m_walkOffset.y = -totalPixelsWalked;
247  m_walkOffset.y = totalPixelsWalked;
248 
250  m_walkOffset.x = totalPixelsWalked;
252  m_walkOffset.x = -totalPixelsWalked;
253 }
254 
256 {
258 
259  m_preWalking = false;
260 
261  if(m_serverWalking) {
262  if(m_serverWalkEndEvent)
263  m_serverWalkEndEvent->cancel();
264 
265  const auto self = asLocalPlayer();
266  m_serverWalkEndEvent = g_dispatcher.scheduleEvent([self] {
267  self->m_serverWalking = false;
268  }, 100);
269  }
270 }
271 
273 {
275 
276  /* Does not seem to be needed anymore
277  // on teleports lock the walk
278  if(!m_oldPosition.isInRange(m_position,1,1))
279  lockWalk();
280  */
281 }
282 
283 void LocalPlayer::onPositionChange(const Position& newPos, const Position& oldPos)
284 {
285  Creature::onPositionChange(newPos, oldPos);
286 
287  if(newPos == m_autoWalkDestination)
288  stopAutoWalk();
289  else if(m_autoWalkDestination.isValid() && newPos == m_lastAutoWalkPosition)
290  autoWalk(m_autoWalkDestination);
291 }
292 
293 void LocalPlayer::setStates(int states)
294 {
295  if(m_states != states) {
296  const int oldStates = m_states;
297  m_states = states;
298 
299  callLuaField("onStatesChange", states, oldStates);
300  }
301 }
302 
303 void LocalPlayer::setSkill(Otc::Skill skill, int level, int levelPercent)
304 {
305  if(skill >= Otc::LastSkill) {
306  g_logger.traceError("invalid skill");
307  return;
308  }
309 
310  const int oldLevel = m_skillsLevel[skill];
311  const int oldLevelPercent = m_skillsLevelPercent[skill];
312 
313  if(level != oldLevel || levelPercent != oldLevelPercent) {
314  m_skillsLevel[skill] = level;
315  m_skillsLevelPercent[skill] = levelPercent;
316 
317  callLuaField("onSkillChange", skill, level, levelPercent, oldLevel, oldLevelPercent);
318  }
319 }
320 
321 void LocalPlayer::setBaseSkill(Otc::Skill skill, int baseLevel)
322 {
323  if(skill >= Otc::LastSkill) {
324  g_logger.traceError("invalid skill");
325  return;
326  }
327 
328  const int oldBaseLevel = m_skillsBaseLevel[skill];
329  if(baseLevel != oldBaseLevel) {
330  m_skillsBaseLevel[skill] = baseLevel;
331 
332  callLuaField("onBaseSkillChange", skill, baseLevel, oldBaseLevel);
333  }
334 }
335 
336 void LocalPlayer::setHealth(double health, double maxHealth)
337 {
338  if(m_health != health || m_maxHealth != maxHealth) {
339  const double oldHealth = m_health;
340  const double oldMaxHealth = m_maxHealth;
341  m_health = health;
342  m_maxHealth = maxHealth;
343 
344  callLuaField("onHealthChange", health, maxHealth, oldHealth, oldMaxHealth);
345 
346  // cannot walk while dying
347  if(health == 0) {
348  if(isPreWalking())
349  stopWalk();
350  lockWalk();
351  }
352  }
353 }
354 
355 void LocalPlayer::setFreeCapacity(double freeCapacity)
356 {
357  if(m_freeCapacity != freeCapacity) {
358  const double oldFreeCapacity = m_freeCapacity;
359  m_freeCapacity = freeCapacity;
360 
361  callLuaField("onFreeCapacityChange", freeCapacity, oldFreeCapacity);
362  }
363 }
364 
365 void LocalPlayer::setTotalCapacity(double totalCapacity)
366 {
367  if(m_totalCapacity != totalCapacity) {
368  const double oldTotalCapacity = m_totalCapacity;
369  m_totalCapacity = totalCapacity;
370 
371  callLuaField("onTotalCapacityChange", totalCapacity, oldTotalCapacity);
372  }
373 }
374 
375 void LocalPlayer::setExperience(double experience)
376 {
377  if(m_experience != experience) {
378  const double oldExperience = m_experience;
379  m_experience = experience;
380 
381  callLuaField("onExperienceChange", experience, oldExperience);
382  }
383 }
384 
385 void LocalPlayer::setLevel(double level, double levelPercent)
386 {
387  if(m_level != level || m_levelPercent != levelPercent) {
388  const double oldLevel = m_level;
389  const double oldLevelPercent = m_levelPercent;
390  m_level = level;
391  m_levelPercent = levelPercent;
392 
393  callLuaField("onLevelChange", level, levelPercent, oldLevel, oldLevelPercent);
394  }
395 }
396 
397 void LocalPlayer::setMana(double mana, double maxMana)
398 {
399  if(m_mana != mana || m_maxMana != maxMana) {
400  const double oldMana = m_mana;
401  double oldMaxMana;
402  m_mana = mana;
403  m_maxMana = maxMana;
404 
405  callLuaField("onManaChange", mana, maxMana, oldMana, oldMaxMana);
406 
409  }
410 }
411 
412 void LocalPlayer::setMagicLevel(double magicLevel, double magicLevelPercent)
413 {
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;
419 
420  callLuaField("onMagicLevelChange", magicLevel, magicLevelPercent, oldMagicLevel, oldMagicLevelPercent);
421  }
422 }
423 
424 void LocalPlayer::setBaseMagicLevel(double baseMagicLevel)
425 {
426  if(m_baseMagicLevel != baseMagicLevel) {
427  const double oldBaseMagicLevel = m_baseMagicLevel;
428  m_baseMagicLevel = baseMagicLevel;
429 
430  callLuaField("onBaseMagicLevelChange", baseMagicLevel, oldBaseMagicLevel);
431  }
432 }
433 
434 void LocalPlayer::setSoul(double soul)
435 {
436  if(m_soul != soul) {
437  const double oldSoul = m_soul;
438  m_soul = soul;
439 
440  callLuaField("onSoulChange", soul, oldSoul);
441  }
442 }
443 
444 void LocalPlayer::setStamina(double stamina)
445 {
446  if(m_stamina != stamina) {
447  const double oldStamina = m_stamina;
448  m_stamina = stamina;
449 
450  callLuaField("onStaminaChange", stamina, oldStamina);
451  }
452 }
453 
455 {
456  if(inventory >= Otc::LastInventorySlot) {
457  g_logger.traceError("invalid slot");
458  return;
459  }
460 
461  if(m_inventoryItems[inventory] != item) {
462  const ItemPtr oldItem = m_inventoryItems[inventory];
463  m_inventoryItems[inventory] = item;
464 
465  callLuaField("onInventoryChange", inventory, item, oldItem);
466  }
467 }
468 
469 void LocalPlayer::setVocation(int vocation)
470 {
471  if(m_vocation != vocation) {
472  const int oldVocation = m_vocation;
473  m_vocation = vocation;
474 
475  callLuaField("onVocationChange", vocation, oldVocation);
476  }
477 }
478 
479 void LocalPlayer::setPremium(bool premium)
480 {
481  if(m_premium != premium) {
482  m_premium = premium;
483 
484  callLuaField("onPremiumChange", premium);
485  }
486 }
487 
488 void LocalPlayer::setRegenerationTime(double regenerationTime)
489 {
490  if(m_regenerationTime != regenerationTime) {
491  const double oldRegenerationTime = m_regenerationTime;
492  m_regenerationTime = regenerationTime;
493 
494  callLuaField("onRegenerationChange", regenerationTime, oldRegenerationTime);
495  }
496 }
497 
498 void LocalPlayer::setOfflineTrainingTime(double offlineTrainingTime)
499 {
500  if(m_offlineTrainingTime != offlineTrainingTime) {
501  const double oldOfflineTrainingTime = m_offlineTrainingTime;
502  m_offlineTrainingTime = offlineTrainingTime;
503 
504  callLuaField("onOfflineTrainingChange", offlineTrainingTime, oldOfflineTrainingTime);
505  }
506 }
507 
508 void LocalPlayer::setSpells(const std::vector<int>& spells)
509 {
510  if(m_spells != spells) {
511  const std::vector<int> oldSpells = m_spells;
512  m_spells = spells;
513 
514  callLuaField("onSpellsChange", spells, oldSpells);
515  }
516 }
517 
518 void LocalPlayer::setBlessings(int blessings)
519 {
520  if(blessings != m_blessings) {
521  const int oldBlessings = m_blessings;
522  m_blessings = blessings;
523 
524  callLuaField("onBlessingsChange", blessings, oldBlessings);
525  }
526 }
527 
529 {
531 }
stdext::millis
ticks_t millis()
Definition: time.cpp:37
Otc::InvalidDirection
@ InvalidDirection
Definition: const.h:192
Position::translatedToDirection
Position translatedToDirection(Otc::Direction direction)
Definition: position.h:41
Position::isInRange
bool isInRange(const Position &pos, int xRange, int yRange) const
Definition: position.h:214
LocalPlayer::setHealth
void setHealth(double health, double maxHealth)
Definition: localplayer.cpp:336
Creature::terminateWalk
virtual void terminateWalk()
Definition: creature.cpp:607
LocalPlayer::setRegenerationTime
void setRegenerationTime(double regenerationTime)
Definition: localplayer.cpp:488
Map::requestDrawing
void requestDrawing(const Position &pos, const Otc::RequestDrawFlags reDrawFlags, const bool force=false, const bool isLocalPlayer=false)
Definition: map.cpp:84
eventdispatcher.h
Game::getPing
int getPing()
Definition: game.h:333
graphics.h
LocalPlayer::cancelWalk
void cancelWalk(Otc::Direction direction=Otc::InvalidDirection)
Definition: localplayer.cpp:126
g_map
Map g_map
Definition: map.cpp:36
LocalPlayer::canWalk
bool canWalk(Otc::Direction direction)
Definition: localplayer.cpp:65
LocalPlayer::setMana
void setMana(double mana, double maxMana)
Definition: localplayer.cpp:397
TPoint::y
T y
Definition: point.h:83
Timer::ticksElapsed
ticks_t ticksElapsed()
Definition: timer.cpp:33
Otc::North
@ North
Definition: const.h:184
LocalPlayer::lockWalk
void lockWalk(int millis=250)
Definition: localplayer.cpp:60
LocalPlayer::updateWalk
void updateWalk() override
Definition: localplayer.h:111
g_dispatcher
EventDispatcher g_dispatcher
Definition: eventdispatcher.cpp:28
Position::isValid
bool isValid() const
Definition: position.h:196
Game::stop
void stop()
Definition: game.cpp:764
Creature::setDirection
void setDirection(Otc::Direction direction)
Definition: creature.cpp:672
LocalPlayer::setLevel
void setLevel(double level, double levelPercent)
Definition: localplayer.cpp:385
LocalPlayer::stopWalk
void stopWalk() override
Definition: localplayer.cpp:228
Position::translatedToDirections
std::vector< Position > translatedToDirections(const std::vector< Otc::Direction > &dirs) const
Definition: position.h:117
Otc::LastInventorySlot
@ LastInventorySlot
Definition: const.h:147
LocalPlayer::asLocalPlayer
LocalPlayerPtr asLocalPlayer()
Definition: localplayer.h:100
Creature::m_updateDynamicInformation
stdext::boolean< false > m_updateDynamicInformation
Definition: creature.h:202
LocalPlayer::onAppear
void onAppear() override
Definition: localplayer.cpp:272
LocalPlayer::autoWalk
bool autoWalk(const Position &destination)
Definition: localplayer.cpp:156
Creature::onPositionChange
void onPositionChange(const Position &newPos, const Position &oldPos) override
Definition: creature.cpp:427
ticks_t
int64 ticks_t
Definition: types.h:43
LocalPlayer::setInventoryItem
void setInventoryItem(Otc::InventorySlot inventory, const ItemPtr &item)
Definition: localplayer.cpp:454
g_game
Game g_game
Definition: game.cpp:37
Point
TPoint< int > Point
Definition: point.h:86
LocalPlayer::hasSight
bool hasSight(const Position &pos)
Definition: localplayer.cpp:528
Creature::m_baseSpeed
double m_baseSpeed
Definition: creature.h:165
Map::findPath
std::tuple< std::vector< Otc::Direction >, Otc::PathFindResult > findPath(const Position &start, const Position &goal, int maxComplexity, int flags=0)
Definition: map.cpp:766
Otc::LastSkill
@ LastSkill
Definition: const.h:180
Otc::Skill
Skill
Definition: const.h:166
LocalPlayer::setBaseMagicLevel
void setBaseMagicLevel(double baseMagicLevel)
Definition: localplayer.cpp:424
LocalPlayer::terminateWalk
void terminateWalk() override
Definition: localplayer.cpp:255
Otc::ReDrawDynamicInformation
@ ReDrawDynamicInformation
Definition: const.h:60
Thing::m_position
Position m_position
Definition: thing.h:141
LocalPlayer::preWalk
void preWalk(Otc::Direction direction)
Definition: localplayer.cpp:107
Otc::NorthEast
@ NorthEast
Definition: const.h:188
Otc::PathFindResultOk
@ PathFindResultOk
Definition: const.h:447
Otc::Direction
Direction
Definition: const.h:183
LocalPlayer::stopAutoWalk
void stopAutoWalk()
Definition: localplayer.cpp:218
localplayer.h
LocalPlayer::setMagicLevel
void setMagicLevel(double magicLevel, double magicLevelPercent)
Definition: localplayer.cpp:412
LocalPlayer::setStates
void setStates(int states)
Definition: localplayer.cpp:293
LuaObject::callLuaField
R callLuaField(const std::string &field, const T &... args)
Definition: luaobject.h:172
LocalPlayer::walk
void walk(const Position &oldPos, const Position &newPos) override
Definition: localplayer.cpp:84
LocalPlayer::setPremium
void setPremium(bool premium)
Definition: localplayer.cpp:479
g_logger
Logger g_logger
Definition: logger.cpp:35
LocalPlayer::setExperience
void setExperience(double experience)
Definition: localplayer.cpp:375
LocalPlayer::onPositionChange
void onPositionChange(const Position &newPos, const Position &oldPos) override
Definition: localplayer.cpp:283
Otc::West
@ West
Definition: const.h:187
LocalPlayer::setSoul
void setSoul(double soul)
Definition: localplayer.cpp:434
Creature::walk
virtual void walk(const Position &oldPos, const Position &newPos)
Definition: creature.cpp:333
Position
Definition: position.h:33
Creature::m_walkOffset
Point m_walkOffset
Definition: creature.h:206
LocalPlayer::setVocation
void setVocation(int vocation)
Definition: localplayer.cpp:469
LocalPlayer::updateWalkOffset
void updateWalkOffset(int totalPixelsWalked) override
Definition: localplayer.cpp:235
Otc::BlessingNone
@ BlessingNone
Definition: const.h:498
map.h
Creature::updateWalkOffset
virtual void updateWalkOffset(int totalPixelsWalked)
Definition: creature.cpp:511
TPoint::x
T x
Definition: point.h:83
Otc::PathFindAllowNotSeenTiles
@ PathFindAllowNotSeenTiles
Definition: const.h:455
LocalPlayer::isAutoWalking
bool isAutoWalking()
Definition: localplayer.h:95
Creature::m_walkTimer
Timer m_walkTimer
Definition: creature.h:197
LocalPlayer::LocalPlayer
LocalPlayer()
Definition: localplayer.cpp:30
Creature::isParalyzed
bool isParalyzed() const
Definition: creature.h:131
Otc::SouthEast
@ SouthEast
Definition: const.h:189
Position::getDirectionFromPosition
Otc::Direction getDirectionFromPosition(const Position &position) const
Definition: position.h:190
Creature::m_direction
Otc::Direction m_direction
Definition: creature.h:158
Otc::PathFindResult
PathFindResult
Definition: const.h:446
LocalPlayer::setOfflineTrainingTime
void setOfflineTrainingTime(double offlineTrainingTime)
Definition: localplayer.cpp:498
Otc::South
@ South
Definition: const.h:186
LocalPlayer::setTotalCapacity
void setTotalCapacity(double totalCapacity)
Definition: localplayer.cpp:365
Otc::InventorySlot
InventorySlot
Definition: const.h:131
AwareRange::left
int left
Definition: map.h:134
Otc::NorthWest
@ NorthWest
Definition: const.h:191
LocalPlayer::setBaseSkill
void setBaseSkill(Otc::Skill skill, int baseLevel)
Definition: localplayer.cpp:321
LocalPlayer::isPreWalking
bool isPreWalking()
Definition: localplayer.h:94
stdext::shared_object_ptr< Item >
LocalPlayer::setStamina
void setStamina(double stamina)
Definition: localplayer.cpp:444
Otc::East
@ East
Definition: const.h:185
LocalPlayer::setSpells
void setSpells(const std::vector< int > &spells)
Definition: localplayer.cpp:508
Creature::m_walking
stdext::boolean< false > m_walking
Definition: creature.h:200
Creature::stopWalk
virtual void stopWalk()
Definition: creature.cpp:363
Creature::getStepDuration
int getStepDuration(bool ignoreDiagonal=false, Otc::Direction dir=Otc::InvalidDirection)
Definition: creature.cpp:877
game.h
Clock::millis
ticks_t millis()
Definition: clock.h:37
LocalPlayer::setBlessings
void setBlessings(int blessings)
Definition: localplayer.cpp:518
Creature::onAppear
void onAppear() override
Definition: creature.cpp:432
EventDispatcher::scheduleEvent
ScheduledEventPtr scheduleEvent(const std::function< void()> &callback, int delay)
Definition: eventdispatcher.cpp:82
tile.h
Event::cancel
void cancel()
Definition: event.cpp:49
LocalPlayer::setFreeCapacity
void setFreeCapacity(double freeCapacity)
Definition: localplayer.cpp:355
g_clock
Clock g_clock
Definition: clock.cpp:25
AwareRange::top
int top
Definition: map.h:131
Game::walk
bool walk(Otc::Direction direction)
Definition: game.cpp:579
Game::autoWalk
void autoWalk(std::vector< Otc::Direction > dirs)
Definition: game.cpp:666
Otc::SouthWest
@ SouthWest
Definition: const.h:190
Map::getAwareRange
AwareRange getAwareRange()
Definition: map.h:239
LocalPlayer::setSkill
void setSkill(Otc::Skill skill, int level, int levelPercent)
Definition: localplayer.cpp:303