Search the Community
Showing results for tags 'walk'.
-
Bom, vou mostrar a vocês como editar o andar diagonal no otclient da maneira que vocês preferirem... Atualmente, creio que quando você anda diagonalmente, tem um delay até que você possa andar novamente. Vou ensinar tirar esse delay, e deixar a velocidade ao gosto de vocês. Em creature.cpp do server, procure pela linha: if(std::abs(newPos.x - oldPos.x) >= 1 && std::abs(newPos.y - oldPos.y) >= 1) lastStepCost = 3; Esse lastStepCost será a velocidade que o player terá ao andar diagonalmente, em relação a velocidade de quando ele anda em uma direção reta, por exemplo, um player que demora 1 segundo para andar 1 sqm, demoraria 3 segundos para andar diagonalmente. Edite esse valor ao seu gosto! Em creature.cpp do client, procure as linhas que tem isso: getStepDuration(true) E deixe assim: getStepDuration() Agora procure por: float factor = 3; if(g_game.getClientVersion() <= 810) factor = 2; Apague essa parte Logo mais abaixo tem: if(!ignoreDiagonal && (m_lastStepDirection == Otc::NorthWest || m_lastStepDirection == Otc::NorthEast || m_lastStepDirection == Otc::SouthWest || m_lastStepDirection == Otc::SouthEast)) interval *= factor; Em factor, deixe o mesmo valor que você deixou em lastStepCost no servidor. Agora em localplayer.cpp no client, novamente procure por: getStepDuration(true) E troque por: getStepDuration() Pronto, seu personagem andará diagonalmente mais suave, e com a velocidade que você escolheu.
- 19 replies
-
- tutorial
- programação
-
(and 3 more)
Tagged with:
-
Editado: Script com a versão 2 testado em outras versões de pokemon. Fiz o script para o player se movimentar sozinho (!walk). O Script pode conter alguns bugs pois testei pouco. Vá em data/talkactions/talkactions.xml e adicione: <talkaction words="!walk" event="script" value="walk.lua"/> Em data/talkactions/scripts/ crie um arquivo chamado walk.lua e adicione: V1: Testado apenas no pokemon DxP V3 V2: Testado em outras versões do pokemon. local function checkSpeed(cid) local playerSpeed = getCreatureSpeed(cid) local speed = 350 - (playerSpeed / 10) return speedendlocal function checkTile(cid, pos) if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return 1 else return doTileQueryAdd(cid, pos) endendlocal function walk(cid) if not isPlayer(cid) then return true end local speed = checkSpeed(cid) local poslook = getCreatureLookPosition(cid) if getPlayerStorageValue(cid, 43221) == 1 then if checkTile(cid, poslook) == 1 then doMoveCreature(cid, getPlayerLookDir(cid)) addEvent(walk, speed, cid) else setPlayerStorageValue(cid, 43221, 0) doPlayerSetNoMove(cid, false) end endendfunction onSay(cid, words, param) if getPlayerStorageValue(cid, 43221) == 1 then setPlayerStorageValue(cid, 43221, -1) doPlayerSetNoMove(cid, false) else setPlayerStorageValue(cid, 43221, 1) doPlayerSetNoMove(cid, true) local speed = checkSpeed(cid) addEvent(walk, speed, cid) endreturn trueend Usei uma formula que achei parecida com o movimento do player (voando e andando). Como é um script baseado em eventos, ele usa miliseconds e não consegui fazer usar a velocidade do player, caso acharem que a velocidade está baixa, alterem a linha abaixo para a formula desejada. local speed = 350 - (playerSpeed / 10) -- formula para o movimento.