Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 03/31/16 em todas áreas

  1. Bom dia galera, tudo bem? Decidi fazer uma talkaction para ilustrar o sistema que criei de customização de ataque básico: Personalizando Ataques Básicos Óbviamente, ela não é a melhor forma de usar o sistema (afinal assim o player poderia definir qualquer range / tipo de combate/ efeito que ele quiser), mas serve para ilustrar como o sistema funciona. Sem mais delongas, vá em talkactions.xml e cole a tag abaixo: <talkaction words="/cbh" separator=" " script="changeBasicHit.lua" /> Em talkactions/scripts crie um arquivo chamado changeBasicHit.lua e cole o script abaixo nele: local combats = { ["physical"] = COMBAT_PHYSICALDAMAGE, ["energy"] = COMBAT_ENERGYDAMAGE, ["earth"] = COMBAT_EARTHDAMAGE, ["fire"] = COMBAT_FIREDAMAGE, ["undefined"] = COMBAT_UNDEFINEDDAMAGE, ["life_drain"] = COMBAT_LIFEDRAIN, ["mana_drain"] = COMBAT_MANADRAIN, ["healing"] = COMBAT_HEALING, ["drown"] = COMBAT_DROWNDAMAGE, ["ice"] = COMBAT_ICEDAMAGE, ["holy"] = COMBAT_HOLYDAMAGE, ["death"] = COMBAT_DEATHDAMAGE}local distanceEffects = { ["spear"] = CONST_ANI_SPEAR, ["bolt"] = CONST_ANI_BOLT, ["arrow"] = CONST_ANI_ARROW, ["fire"] = CONST_ANI_FIRE, ["energy"] = CONST_ANI_ENERGY, ["poison_arrow"] = CONST_ANI_POISONARROW, ["burst_arrow"] = CONST_ANI_BURSTARROW, ["throwing_star"] = CONST_ANI_THROWINGSTAR, ["throwing_knife"] = CONST_ANI_THROWINGKNIFE, ["smallstone"] = CONST_ANI_SMALLSTONE, ["death"] = CONST_ANI_DEATH, ["large_rock"] = CONST_ANI_LARGEROCK, ["snowball"] = CONST_ANI_SNOWBALL, ["power_bolt"] = CONST_ANI_POWERBOLT, ["poison"] = CONST_ANI_POISON, ["infernal_bolt"] = CONST_ANI_INFERNALBOLT, ["hunting_spear"] = CONST_ANI_HUNTINGSPEAR, ["enchanted_spear"] = CONST_ANI_ENCHANTEDSPEAR, ["red_star"] = CONST_ANI_REDSTAR, ["green_star"] = CONST_ANI_GREENSTAR, ["royal_spear"] = CONST_ANI_ROYALSPEAR, ["sniper_arrow"] = CONST_ANI_SNIPERARROW, ["onyx_arrow"] = CONST_ANI_ONYXARROW, ["piercing_bolt"] = CONST_ANI_PIERCINGBOLT, ["sword"] = CONST_ANI_WHIRLWINDSWORD, ["axe"] = CONST_ANI_WHIRLWINDAXE, ["club"] = CONST_ANI_WHIRLWINDCLUB, ["ethereal_spear"] = CONST_ANI_ETHEREALSPEAR, ["ice"] = CONST_ANI_ICE, ["earth"] = CONST_ANI_EARTH, ["holy"] = CONST_ANI_HOLY, ["sudden_death"] = CONST_ANI_SUDDENDEATH, ["flash_arrow"] = CONST_ANI_FLASHARROW, ["flamming_arrow"] = CONST_ANI_FLAMMINGARROW, ["shiver_arrow"] = CONST_ANI_SHIVERARROW, ["energy_ball"] = CONST_ANI_ENERGYBALL, ["small_ice"] = CONST_ANI_SMALLICE, ["small_holy"] = CONST_ANI_SMALLHOLY, ["small_earth"] = CONST_ANI_SMALLEARTH, ["earth_arrow"] = CONST_ANI_EARTHARROW, ["explosion"] = CONST_ANI_EXPLOSION, ["cake"] = CONST_ANI_CAKE, ["tarsal_arrow"] = CONST_ANI_TARSALARROW, ["vortex_bolt"] = CONST_ANI_VORTEXBOLT, ["prismatic_bolt"] = CONST_ANI_PRISMATICBOLT, ["crystalline_arrow"] = CONST_ANI_CRYSTALLINEARROW, ["drill_bolt"] = CONST_ANI_DRILLBOLT, ["envenomed_arrow"] = CONST_ANI_ENVENOMEDARROW, ["physical"] = CONST_ANI_GLOOTHSPEAR, ["simple_arrow"] = CONST_ANI_SIMPLEARROW,}function onSay(player, words, param) local config = string.split(param, " ") if #config ~= 3 then doPlayerSendCancel(player, "Invalid params number. You must specify three params: range combat type effect!") doSendMagicEffect(getCreaturePosition(player), CONST_ME_POFF) return false end if not tonumber(config[1]) then doPlayerSendCancel(player, "Pay attention: 1. Params order is: range combat effect. 2. Range must be a number.") doSendMagicEffect(getCreaturePosition(player), CONST_ME_MAGIC_BLUE) return false end player:setFistConditions(config[1], combats[config[2]] or COMBAT_PHYSICALDAMAGE, distanceEffects[config[3]] or config[1] == 1 and CONST_ANI_NONE or CONST_ANI_SNOWBALL) doSendMagicEffect(getCreaturePosition(player), CONST_ME_MAGIC_BLUE)end Imagem: Enfim, espero que gostem. Abraços,
    4 pontos
  2. Já deixo claro que não sou amigo nem nada desse , estou tentando entender a sua infantilidade até agora nesse tópico, primeiro que em momento algum eu vi ele dizendo que os sistemas foram criados por ele, segundo ele não vai postar, pois imagino que tu saiba ler e o tópico está em MONTE SUA EQUIPE, e aqui é o lugar onde montamos equipe. Você está exigindo crédito em um sistema que se tu fez ou não, não é obrigado a colocar, apenas se ele estivesse disponibilizando para download. Você exige créditos mas olhei no tópico do seu projeto e cadê os créditos dos cara que montou a base do tfs, cadê os créditos dos que adaptaram para funcionar a base de pokemon, dos sistemas, dos clientes, da sprites, dos scripts, das zilhões de coisas que tu usa sem crédito, ou vai me dizer que tu é o fodão e fez isso tudo isso sozinho ? então para de ser criança e não pense apenas em si mesmo, pois somos uma comunidade a base do Open Source.
    4 pontos
  3. Skulls

    Personalizando Ataques Básicos

    Boa noite pessoal, tudo bem? Introdução Venho até vocês hoje postar um sistema que desenvolvi para customização de ataques básicos. Basicamente ele permite que você defina as características visuais do ataque básico de um player qualquer: efeito, tipo de dano e range. As modificações de itens ainda se sobrepõe ao mesmo, seguindo as regras: 1. A range do item só sobrepõe a range base do jogador se, e somente SE, esta for última for menor do que a primeira. 2. O efeito e o tipo de dano do item se sobrepõem ao base sempre que estes existirem. Códigos: 1. Definição da função lua responsável por chamar a alteração O primeiro passo é definir a função lua que será responsável pela alteração do ataque basico: player:setFistConditions(range, combatType, distanceEffect) Abra o arquivo luascript.h e cole isso dentro dos métodos protegidos de LuaScriptInterface: static int luaPlayerSetFistConditions(lua_State* L); Em seguida, abra luascript.cpp para configurarmos a implementação do método. Junto aos demais registros do tipo player cole este: registerMethod("Player", "setFistConditions", LuaScriptInterface::luaPlayerSetFistConditions); Junto às demais funções do metadata "Player" coloque: int LuaScriptInterface::luaPlayerSetFistConditions(lua_State* L) { // player:setFistConditions(range, combatType, distanceEffect) Player* player = getUserdata<Player>(L, 1); if (player) { player->setFistConditions(getNumber<uint8_t>(L, 2), getNumber<CombatType_t>(L, 3), getNumber<ShootType_t>(L, 4)); } else { lua_pushnil(L); } return 1; } Pronto, a sua função lua está configurada. 2. Configurar os atributos que definem o novo ataque base do player Nessa etapa vamos alterar a classe "Player" para receber os atributos referentes ao range, tipo de combate e efefeito do ataque base, bem como funções para definí-los e recebê-los (getters and setters). Em player.h, dentro de variáveis protegidas (protected:), cole: ShootType_t fistDistanceEffect; uint8_t fistRange; CombatType_t fistCombatType; Na parte publica (public:) defina os getters and setters: void setFistConditions(uint8_t range, CombatType_t combatType, ShootType_t distanceEffect) { fistRange = range; fistCombatType = combatType; fistDistanceEffect = distanceEffect; } uint8_t getFistRange() { return fistRange; } CombatType_t getFistCombatType() { return fistCombatType; } ShootType_t getFistDistanceEffect() { return fistDistanceEffect; } Agora, em player.cpp, dentro do construtor (Player::Player(ProtocolGame_ptr p) : Creature(), inventory(), client(p), varSkills(), varStats(), inventoryAbilities()) coloque: fistDistanceEffect = ShootType_t::CONST_ANI_NONE; fistRange = 1; fistCombatType = CombatType_t::COMBAT_PHYSICALDAMAGE; Pronto, mais uma etapa concluída. A sua classe player está pronta para receber as variáveis referentes à customização do ataque básico. 3. Configuração da Classe Weapon e suas subClasses Chegou a hora de configurar a classe Weapon e suas subClasses, responsáveis pela execução do dano base. Primeiramente, abra o arquivo Weapons.h e, dentro do public da classe Weapons coloque: virtual void Weapon::setFistDistanceParams(Player* player, CombatParams& params) const Em Weapons.cpp, vá até o método Weapons::useFist(Player* player, Creature* target) e substitua: if (!Position::areInRange<1, 1>(player->getPosition(), target->getPosition())) { return false; } Por: Position playerPos = player->getPosition(); Position targetPos = target->getPosition(); if (playerPos.z != targetPos.z) { return false; } if (std::max<uint32_t>(Position::getDistanceX(playerPos, targetPos), Position::getDistanceY(playerPos, targetPos)) > player->getFistRange()) { return false; } Após params.blockedByShield = true; cole: params.distanceEffect = player->getFistDistanceEffect(); params.combatType = player->getFistCombatType(); Pronto o script já é funcional. Isto é, seu ataque base tem efeito, dano e range customizáveis. Porém, qualquer item que for equipado irá sobrepor seu ataque base. Se você quer assim, pare por aqui. Caso você queira que a sobreposição do item sobre a sua customização tenha regras faça o próximo passo. 4. Criando regras Bom, já estamos quase concluindo o tutorial. Agora vamos definir as regras de sobreposição dos itens sobre o ataque base. Volte a Weapons.cpp e defina o método que dita as regras de efeito e tipo do ataque: void Weapon::setFistDistanceParams(Player* player, CombatParams& params) const { params.distanceEffect = params.distanceEffect != ShootType_t::CONST_ANI_NONE ? params.distanceEffect : player->getFistDistanceEffect(); params.combatType = params.combatType != CombatType_t::COMBAT_NONE ? params.combatType : player->getFistCombatType(); } Explicando: Aqui você determina quando o parâmetro final de dano vai ter as caracteríticas da sua arma e quando vai ter de ataque básico. No nosso caso, vai sobrescrever sempre que a arma tiver um efeito e um tipo de dano próprio, isto é, for diferente de CONST_ANI_NONE e COMBAT_NONE. Fique a vontade para modificar este método ao seu gosto. Exemplo: sobrescrever o tipo de dano somente se ele for do tipo físico; sobrescrever o efeito somente se ele ainda não existe; etc, use a criatividade. Bom, para essas configurações de regras valerem, temos agora que substituir o método Weapon::internalUseWeapon por: void Weapon::internalUseWeapon(Player* player, Item* item, Creature* target, int32_t damageModifier) const { if (scripted) { LuaVariant var; var.type = VARIANT_NUMBER; var.number = target->getID(); executeUseWeapon(player, var); } else { CombatDamage damage; WeaponType_t weaponType = item->getWeaponType(); if (weaponType == WEAPON_AMMO || weaponType == WEAPON_DISTANCE) { damage.origin = ORIGIN_RANGED; } else { damage.origin = ORIGIN_MELEE; } CombatParams paramsCheck = params.copyParams(); setFistDistanceParams(player, paramsCheck); damage.primary.type = paramsCheck.combatType; damage.primary.value = (getWeaponDamage(player, target, item) * damageModifier) / 100; damage.secondary.type = getElementType(); damage.secondary.value = getElementDamage(player, target, item); Combat::doCombatHealth(player, target, damage, paramsCheck); } onUsedWeapon(player, item, target->getTile()); } Além disso, devemos ir em combat.h e, dentro da struct CombatParams, criar o seguinte 'método': CombatParams CombatParams::copyParams() const { CombatParams newParams; newParams.dispelType = dispelType; newParams.combatType = combatType; newParams.blockedByArmor = blockedByArmor; newParams.blockedByShield = blockedByShield; newParams.targetCasterOrTopMost = targetCasterOrTopMost; newParams.aggressive = aggressive; newParams.itemId = itemId; newParams.impactEffect = impactEffect; newParams.distanceEffect = distanceEffect; newParams.useCharges = useCharges; newParams.origin = origin; return newParams; } A última modificação é a definição da regra de range. De volta ao Weapons.cpp e no método Weapon::playerWeaponCheck logo após: if (playerPos.z != targetPos.z) { return 0; } Cole: shootRange = player->getFistRange() <= shootRange ? shootRange : player->getFistRange(); No caso, a regra é para substituir a range base pela range do item SE esta for menor que a primeira. Outro exemplo seria só substituir a range base pela do item SE a range base for maior que 1 (para que knights não possam usar ranged itens, por exemplo). Enfim pessoal, isso é tudo. Espero que gostem. Abraços e boa noite. Editado: Criado um tópico em scripting ilustrando a utilização do sistema: Exemplificando Customização de Ataque
    3 pontos
  4. Deadpool

    Comando

    Deixa, ja vi que é pokémon. Então substitui por este. local Fpoke = {"Mewtwo","Meowth"} -- Aqui Coloca Os Pokemon Que Vai Falar function onSay(cid,words,param) local pokemons = getCreatureSummons(cid) if not isPremium(cid) then doPlayerSendCancel(cid, "Only premium!") return true end if #pokemons == 0 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "your pokemon is not out of the ball") end if table.find(Fpoke, getCreatureName(getCreatureSummons(cid)[1])) then doCreatureSay(getCreatureSummons(cid)[1],param,TALKTYPE_MONSTER) else doPlayerSendCancel(cid,"Este Pokemon Nao Tem Abilidades De Fala") end return true end
    2 pontos
  5. - Liberamos a segunda cidade, apesar de ainda não estar completa. Lá encontrarão zumbis mais fortes e em maior quantidade. - Exp alterada de 3x para 5x. - Aprimoramentos em alguns sistemas.
    2 pontos
  6. Opa galera, beleza? haha.. Então, desde que eu arrumei meu PC, eu volei a mexer com OpenTibia. Eu tinha/tenho alguns projetos aqui parado, inclusive um que eu estava desenvolvendo inteiramente para a comunidade XTibia. Porém, eu decidi parar um pouco novamente, e voltar a mexer com meu projeto, o PokémonSekaiMMO. Bem, um tempo atras eu fechei o servidor, pois tava sem PC. (Até gerou boatos que eu tinha vendido o servidor, e que o Mitsuig, que estava me dando o host, estava vendendo o "Sekai".). Porém, era tudo mentira, o servidor NUNCA saio do meu pc, e como agora terminei os estudos, arrumei o PC, e tenho o dia inteiramente livre, decidi reabrir o Projeto, já até fiz novas atualizações! segue: P.S: Peço desculpa a todos os membros que trabalharam comigo, inclusivo o Lulampo.. Bem, é isso.. Em breve vou reabrir a página! Por enquanto é só aqui no tópico mesmo O Sekai tem os sistemas básicos de todo pokétibia, e todos estão funcionando como deveriam funcionar. Eu testei todos, encontrei bugs e arrumei, então, se quando o fan game estiver online, e você encontrar algum bug, não deixe de reportar!; Order; Fly; Ride; Surf; Blink; Control Mind; Light; Dive; Cut; Rock Smash; Pokedex; Go/Back Nuse Joy healando todos os pokémons da bag; H"NomeDaCidade; Pokémons moves {m1;m12} - avisado quando o cd estiver pronto para uso; Passive pokémons; Pokémons balanceados; (faltando apenas corrigir o level dos moves e criar novas magias para deixar igual o anime); Lideres de Ginasio; Elite Four; Clan (influenciando no ataque e defesa); {novo clan, iron hard}; Food (Influenciando no ataque e defesa); Evoluções; Boost system; Ditto/shiny ditto system; Fishing com iscas; Happy system; Novos elementos {metal - iron, e fairy - fada}; Estou pensando em adicionar o sistema de TM, e tambem Agg system(cruzamento de pokémons); Não vou citar todos, para não perder a graça ^^'; Icon system, nem vou explicar..; Nick system; Uniqued e Lock system( deixa seus pokémons com lock de até 90 dias); Duel por party 2x2 com 6 pokémons, (já comecei a fazer 3x3); Shiny aleatorio; pokémons shinys com as colorações igual a o anime; Então.. não vou listar tudo.. Quanto as quest's, ja tenho 30 quest1s desenvolvias; (em solo, dueto, trio e grupo); Systema de Task com contagem; Daily task; Segue algumas imagens, *Cliente não oficial do servidor, já que eu peguei só p testar alguns modules* Sistema de TV; com comandos para Kikar e silenciar; Duel por party; Uniqued item, task clan, contagem de task, icon system, go/back, catch, alerta de cd; Atualizaçoes 30/03: Adicionado sistema de price, que aumenta a cada boost do pokémon. Adicionado sistema de contagem de pokeballs; Quando você capitua um pokémon, aparece quantas e quais pokeballs você usou; Se você não capiturar, aparece uma mensagem mostrando quantas pokeballs você já gastou; Adicionado tambem o comando, para ver quantas balls você ja gastou em um determinado pokémon; !pokeballs"pikachu Refiz a formula do catch segue; catch pokémon + % da pokeball; Adicionado o comando !walk para melhor jogabilidade; feito varios npcs de task's; mudanças no level de pokémons normais e pokémons shinys; mudanças no level parar usar os ataques dos pokémons normais e pokémons shinys; Autoloot, ao clicar no corpse todos os loots vão para sua bag; Catch exp, quando capiturar um pokémon pela primeira vez, você ganha uma quantidade de exp! Sistema de price, contagem de pokeballs; Meu poke preferido *-* Comando !walk, para ajudar na jogabilidade, quando bate em frente de algo, ele para automaticamente! -- Atualições 31/03 adicionado preço em todos os items, conforme a quantidade de item, o preço aumenta; proibido o catch de pokémons: Lendarios; Fossil; Outland; Adicionado PC mostrando rank de; Level, Catch, Fishing, Caught Pokes, Arquievements, Rank Wins, Duel Rank losses, Duel PVP Score, (pontos PVP), (Arquievements ainda não foi totalmente finalizado) Npc's de Task que pedem itens e dão dinheiro e exp! ex: Ash pede Revives e Pairs, e tedar uma pequena quantidade de dinheiro, e você ainda ganha XP or ter ajudado ele! Professor Burton (te da stones a cada X especies dex pokémon de um elemento. Ex: 10 pokemons tipo Poison = 1 venon stone); NPCS configurados; Npc que vende moveis para house; NPC cautch (Colisseum), a cada quantidade de cautch, ele te dar dinheiro, stone, e outfit; NC Dalk para serviços diammond Rocket e Pollice Office com missao inicial! Imagens: Então galera, atualmente estou terminando a danger room, e parti para outro sistema. Também já tenho addon, profissão, brotherhood, held items, cyber wolrd(quest), sistema de HM/TM, Ev's, ganhar xp ao capiturar o primeiro pokémon, price system.. porem, ainda não instalei, mas assim que eu colocar, posto print, e até faço videos.. Como eu disse, uma coisa de cada vez para não acumular e ocasionar debugs! Se alguém tiver afim de me ajudar na parte de; mapper; spriting; design/site; criação de novas magias (bem, é igual o antigo pda); e criar mais npcs de taks, tenho 1 npc pronto, é que não posso fazer varias coisas de uma vez, e como quero varios nps, quero alguem só para criar npcs de taks; adicionar remakes e sprites no cliente; Comentem aqui, que mando PM com meu contato! Qualquer duvidas, comentem..
    1 ponto
  7. Deadpool

    [Duvida] Alcance do NPC

    dentro da pasta npc, ou onde fica o xml, junto com a pasta "scrits". Não tem lib? Qual versão do seu servidor amigo?
    1 ponto
  8. Deadpool

    [Duvida] Alcance do NPC

    Em data/npc/lib/npcsystem e procure por essa linha: talkRadius = 3, Mude para qual numero desejar.
    1 ponto
  9. Deadpool

    [Duvida] Alcance do NPC

    Distancia de fala ou movimento?
    1 ponto
  10. Danihcv

    Comando

    Tópico movido para dúvidas / pedidos resolvidos. EDIT: Acabei de perceber que qm disse "RESOLVIDO" não é o dono do topico... Então... @, por favor, informe se resolveu seu problema.
    1 ponto
  11. 1 ponto
  12. Olá comunidade, venho informá-los que o funcionamento dos Projetos Patrocinados estará suspenso sem data prevista para retorno. Estamos preparando uma nova plataforma e novos pilares para os projetos interessados, por favor tenham paciência. E aproveitando a situação, nada melhor que iniciar uma discussão aberta com a comunidade. Que tipo de benefícios você gostaria de receber ao ser patrocinado pelo xtibia? Não somos papai noel, mas não tenha medo de pedir! :smile_positivo:
    1 ponto
  13. @@gerulecter Procure a seção de Suporte. Se tiver um pouco mais de capacidade use a barra de pesquisa.
    1 ponto
  14. O Projetos Patrocinados sempre teve ótimos benefícios, mas com a evolução do fórum e seus subprojetos a "plataforma" tem que se atualizar... Seria de bom grado adicionar meios de conseguir benefícios em seus subprojetos como OTList e outros, como descontos ou até sorteios... Assim tornando os projetos um pouco mais visíveis. Grandes coisas estão por vir.
    1 ponto
  15. Eu acho que o suporte mínimo de um patrocínio desse nível seria divulgação interna e parceira com prestadores de serviços (servidor, marketing e até mesmo mao de obra - parceria da staff com desenvolvedores do proprio fórum que poderiam auxiliar nos projetos patrocinados). Uma area que da pra explorar seria uma parceria de gerenciamento de patente dos projetos patrocinados. Sistemas exclusivos destes seriam divulgados/comercializados tendo a rentabilidade dividida entre os parceiros. Caberia ao fórum o gerenciamento e fiscalização da não utilização/divulgação/comercialização dos sistemas sem autorização. Não sei, acho que não pode fugir muito disso se não vira bolsa otserver! Kkkk
    1 ponto
  16. Poccnn

    [aula 1] lógica de programação

    A forma com que ele fez está correta e sim, é necessário saber se o item foi retirado. A lógica dele evita bugs no sistema.
    1 ponto
  17. Poccnn

    Preciso Orientaçao

    Vou explicar passo a passo pra você algumas questões do script. --- script function onSay(cid, words, param) if(words == "!buyvip") then doPlayerRemoveItem(cid,6527,30) -- sugiro antes de remover um item, saber se o player tem o item ou a quantidade de itens necessário. if not (getPlayerItem (cid, itemid, quantidade)) then return true, doPlayerSendCancel (cid, "você não tem o item.") end local days = 30 local daysvalue = days * 24 * 60 * 60 local storageplayer = getPlayerStorageValue(cid, 13540) local timenow = os.time() if getPlayerStorageValue(cid, 13540) - os.time() <= 0 then --você já declarou na variável acima "storageplayer", não é necessário repetir aqui. time = timenow + daysvalue else time = storageplayer + daysvalue end if string.find(tostring(getCreatureName(cid)),"[Vip]") then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados ".. days .." dias de VIP no seu character.") setPlayerStorageValue(cid, 13540, time) local quantity = math.floor((getPlayerStorageValue(cid, 13540) - timenow)/(24 * 60 * 60)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você tem ".. quantity .." dias de VIP restantes.") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Foram adicionados ".. days .." dias de VIP no seu character.") setPlayerStorageValue(cid, 13540, time) local name = getCreatureName(cid) db.executeQuery("UPDATE `players` SET `name` = '[Vip] "..name.."' WHERE `id` = "..getPlayerGUID(cid)..";")--essa query tem ser executada depois do player ser removido. doRemoveCreature(cid) end else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você precisa de 30 Multi Coins para colocar vip.") end
    1 ponto
  18. Luga03

    [aula 1] lógica de programação

    Cara, a ideia não está errada, mas tá faltando um fim e você colocou uma checagem desnecessária, Vou refazer pra vc ai vc dá uma olhada blz? Se existe o item1, então: Entregue o item2 Pegue o item1 Senão: diga "Você não tem o item1" Fim É bem mais simples e mais fácil!
    1 ponto
  19. Eu não entendi aonde você quer chega cara. Esse topico aqui não pra postar não. É pra divulgar e arrumar alguem pra me ajudar com mapa. "Monte sua Equipe". Eu não tô fazendo isso pra postar não blz? '-'
    1 ponto
  20. Deadpool

    Auto Loot

    function onUse(cid, item, frompos, item2, topos) if not isContainer(item.uid) then return false end if getItemAttribute(item2.uid, "corpseowner") then owner = getItemAttribute(item2.uid, "corpseowner") if isCreature(owner) and isPlayer(owner) and cid ~= owner then return true end end if getPlayerStorageValue(cid, 83771) >= 1 then return false end itens = getItensInContainer(item.uid) itemType = getItensTypeInContainer(item.uid) itemID = getItensIDInContainer(item.uid) itamsID, itamsType = {}, {} if #itens == 1 then doPlayerPickItem(cid, itens[1], getPlayerItemCount(cid, itemID[1]), itemID[1], itemType[1]) return true end if #itens >= 2 then for x = 1, #itens do table.insert(itamsID, itemID[x]) table.insert(itamsType, itemType[x]) doRemoveItem(itens[x], itemType[x]) end for x = 1, #itamsID do addEvent(doPlayerPickItem2, 10 * x, cid, getPlayerItemCount(cid, itamsID[x]), itamsID[x], itamsType[x]) end return true end return false end actions.xml <action itemid="IDCORPSES" event="script" value="autoLootCorpse.lua"/> No some functions adicione isso no inicio: function doPlayerPickItem(cid, item, count, itemid, itemtype) if not isPlayer(cid) then return false end if not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then return false end if item <= 0 then return false end if count > 0 then doPlayerRemoveItem(cid, itemid, count) end doPlayerAddItem(cid, itemid, count + itemtype) doRemoveItem(item, itemtype) return true end function doPlayerPickItem2(cid, count, itemid, itemtype) if not isPlayer(cid) then return false end if not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then return false end if itemid <= 0 then return false end if count > 0 then doPlayerRemoveItem(cid, itemid, count) end doPlayerAddItem(cid, itemid, count + itemtype) return true end
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...