Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. Oneshot

    Script De Força

    Cara, é bastante simples. Só procurar pelas funções que geram o dano da arma e adicionar um bônus pelo nível de Fist Fighting do jogador, por exemplo: int32_t WeaponMelee::getWeaponDamage(const Player* player, const Creature* target, const Item* item, bool maxDamage /*= false*/) const { int32_t attackSkill = player->getWeaponSkill(item); int32_t attackValue = std::max((int32_t)0, (int32_t(item->getAttack() + item->getExtraAttack()) - elementDamage)); float attackFactor = player->getAttackFactor(); double maxValue = Weapons::getMaxWeaponDamage(player->getLevel(), attackSkill, attackValue, attackFactor); if(random_range(1, 100) <= g_config.getNumber(ConfigManager::CRITICAL_HIT_CHANCE)) { maxValue = std::pow(maxValue, g_config.getDouble(ConfigManager::CRITICAL_HIT_MUL)); player->sendCritical(); } Vocation* vocation = player->getVocation(); if(vocation && vocation->getMultiplier(MULTIPLIER_MELEE) != 1.0) maxValue *= vocation->getMultiplier(MULTIPLIER_MELEE); int32_t ret = (int32_t)std::floor(maxValue); if(maxDamage) return -ret; return -random_range(0, ret, DISTRO_NORMAL); } Essa função acima é responsável por definir o dano aleatório das armas corpo-a-corpo, basta então adicionar um cálculo extra no retorno da função: return -(ret + player->getSkill(SKILL_FIST, SKILL_LEVEL) * 20); return -(random_range(0, ret, DISTRO_NORMAL) + player->getSkill(SKILL_FIST, SKILL_LEVEL) * 20; No caso acima, adicionaria 20 (vinte) a mais de dano por nível da skill Fist Fighting na função de dano corpo-a-corpo.
  2. Oneshot

    Script De Força

    Eu até pensei no creaturescript onStatsChange, mas é totalmente inviável, pois você precisaria registrar em todos os monstros do servidor. Ou seja, só editando as fórmulas de dano. Abraços.
  3. local areas = { [1] = { fromPosition = {x = 93, y = 125, z = 7}, -- upper-left sqm toPosition = {x = 95, y = 127, z = 7}, -- lower-right sqm creatureName = "Rat" } } function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) local pass = true for _, area in ipairs(areas) do local x = {min = math.min(area.fromPosition.x, area.toPosition.x), max = math.max(area.fromPosition.x, area.toPosition.x)} local y = {min = math.min(area.fromPosition.y, area.toPosition.y), max = math.max(area.fromPosition.y, area.toPosition.y)} local width = ((x.max - x.min) / 2) + 1 local lenght = ((y.max - y.min) / 2) + 1 local center = {x = x.min + width, y = y.min + lenght, z = area.fromPosition.z} local specs = getSpectators(center, width, lenght, false) if specs then for _, cn in ipairs(specs) do if getCreatureName(cn):lower() == area.creatureName:lower() then pass = false break end end end end if pass == false then doPlayerSendCancel(cid, "Sorry, you need to kill all the monsters in the area to pass.") doTeleportThing(cid, fromPosition, true) end return true end É um movement, no caso, estou considerando que o teleport já existe com um actionid no mapa. <movevent type="StepIn" actionid="20000" event="script" value="nome_do_arquivo.lua"/> Abraços.
  4. Tópico movido para a seção de dúvidas e pedidos resolvidos.
  5. Você tem certeza que compilou alguma coisa, meu colega? Pois a estrutura das sources nessa função do 0.3.6 para o 0.4 não muda nada. E eu também testei na rev3777 e funcionou perfeitamente. Abraços.
  6. Oneshot

    Script De Força

    Isso só é possível através das sources de um servidor, editando as fórmulas de dano.
  7. Fala aê. Bom, eu me garanto um pouco com Photoshop e até sei fazer uns avatares e signs "masoumeno", mas gostaria de algo mais bem feito que nem vi que vocês da área podem fazer. Tipo de Pedido: Set (Avatar + Sign) Tema: -/- Render/Stock: Stock Tamanhos: 200 X 260 (Avatar); 400 X 120 (Sign) Tipografia: Nenhuma ou "Oneshot" Preferência: Tonynh Abraços.
  8. Vou mover para Pedidos e dúvidas - Programação Enfim, No arquivo player.cpp, procure pela função Player::addExperience, e altere a linha abaixo: sprintf(advMsg, "You advanced from Level %d to Level %d.", prevLevel, level);
  9. Qual a versão do seu servidor, esqueci de dizer que essa modificação, fiz com base no 0.3.6pl1, o que pode mudar para o 0.4
  10. Há dois modos de fazer isso: 1. Compilando isto, [Creaturescript/C++] onMove, nas sources de seu servidor e, indiretamente, através de um script Lua, bloquear que jogadores joguem itens em uma certa posição que já contém X itens. 2. Fazendo apenas uma modificação no bool Game::playerMoveItem, adicionando isso: if(toCylinder->getTile()->getItemCount() > 5) { player->sendCancelMessage(RET_NOTPOSSIBLE); return false; } Antes disso: if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } No caso, ele não deixaria o jogador colocar um item em um tile com mais de cinco itens, mas é só alterar. Abraços.
  11. Genial, Ursão. Realmente é uma ótima ideia essa a sua. Cacete, queria ter a criatividade da Raposa ou a sua.
  12. E quem disse que eu fiz para ficar igual o do RadBR? Se você quer criar uma cópia mal-feita do RadBR, vá estudar Lua e programar suas próprias coisas. Tá fogo esse povinho que quer tudo na mão caindo do céu.
  13. Oneshot

    Script de Spell

    Tópico movido para a seção de dúvidas e pedidos resolvidos.
  14. Coloque return true antes do último end nos dois
  15. 1. Este primeiro erro está relacionado ao nome do mapa configurado errado no arquivo config.lua 2. Servidores mais atuais, como a versão 0.4_SVN do The Forgotten Server, pedem que a codificação de senhas do banco de dados seja em sha1 para maior segurança. Logo, você precisa trocar essa linha: encryptionType = "plain" Para isso: encryptionType = "sha1" 3. E por último, basta desativar a checagem de versão do The Forgotten Server no config.lua confirmOutdatedVersion = true Para confirmOutdatedVersion = false Abraços. Sua dúvida não possui nenhuma relação com programação, estou movendo para Pedidos e dúvidas - Geral
  16. Oneshot

    S.O.S Curso

    Você não vai aprender Lua, Java, entre outros em cursos da S.O.S Computadores e Microlins. Abraços.
  17. Eu desenvolvi um "algoritmo" para decidir as posições de empurrar e puxar das magias, que comparam a posição do jogador para com a posição do alvo. Já do jeito que você quer, eu teria que fazer um novo algoritmo, não com base na comparação de posições, mas sim na direção do olhar do jogador, uma vez que: E no momento estou com preguiça de refazer minha magia que já me agrada como está. Abração.
  18. Desculpe, mas se o dono do tópico reportou como funcional, o problema de não estar adicionando pontos deve ser aí, jNNo. Enfim, estou movendo o tópico para Pedidos e dúvidas resolvidos - Scripting
  19. Raposa filha da mãe... Ótimo script, cara. Sua criatividade excede qualquer limite. Poste seu sistema de climas orientado a objetos e aquele seu tutorial de servidores de vários mundos \o/
  20. os.clock() -- Retorna o tempo em segundos contado desde o ínicio da execução do interpretador. (ou servidor) os.time() -- Retorna o UNIX_TIMESTAMP, ou seja um tempo em segundos contado desde 1/1/1970 table.insert(table[, n], v) -- Insere o valor v na tabela table string.len(string) -- Retorna o tamanho de uma string
  21. Não, na boa, vejo que você quer aprimorar sua programação Lua, mas isso é pog demais. Você cometeu duas "transgressões" graves aí. Primeiro, usar while para percorrer valores de tabelas (que só o caotic acha legal) e segundo declarar uma tabela que não vai mudar, dentro do escopo da função onLogin. Vamos limpar um pouco seu código, acho que não é nem preciso usar for para isso. local outfits = { [2] = {lookType = 194, lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94}, [3] = {lookType = 194, lookHead = 90, lookBody = 90, lookLegs = 90, lookFeet = 90} } function onLogin(cid) local tmp = outfits[getPlayerGroupId(cid)] if(not tmp) then return true end return doSetCreatureOutfit(cid, tmp, -1) end Abraços.
  22. Tópico movido para a seção de dúvidas e pedidos resolvidos.
  23. Tópico movido para a seção de dúvidas e pedidos resolvidos.
  24. function doTeamTeleportThing() local positions = { [1] = {x = 100, y = 100, z = 7}, [2] = {x = 100, y = 100, z = 7} } local storage = 98125 local players = {{}, {}} local n = 0 for var, cid in ipairs(getPlayersOnline()) do if getCreatureStorage(cid, storage) == 1 then if var % 2 == 0 then table.insert(players[1], cid) else table.insert(players[2], cid) end n = n + 1 end end if n >= 4 then for i = 1, #players do for j = 1, #players[i] do doTeleportThing(players[i][j], positions[i]) end end end end Não testei não, mas acho que está bem funcional.
  25. Tópico movido para a seção de dúvidas e pedidos resolvidos.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...