-
Total de itens
631 -
Registro em
-
Última visita
-
Dias Ganhos
13
Tudo que jhon992 postou
-
tira os outros eventos do tipo combat, tira do creaturescript.xml e do login.lua tambem.
-
verifica aew pra min se tem mais algum evento do tipo "combat" no creaturescripts.xml
-
funcionou perfeitamente aqui, vê pra min se não aparece nenhum erro no executavel referente a isso. Ou se vc jah tem algum creaturescript do tipo combat sem ser esse. Se ñ tiver nada tenta fazer passo a passo denovo que irá funcionar.
-
Se você colocar o effect substituindo outro effect ira funcionar, mais se criar um novo effect ao tentar utilizar no jogo não vai aparecer o effect porque vai precisar alterar as sources primeiro, dae o trabalho passa a ser chatinho até. Esse tutorial mostra certinho como deve ser feito e ainda mais: http://www.xtibia.com/forum/topic/137748-tutorialadicionando-efeitos/
-
Faiz o seguinte, cria um arquivo na pasta data/creaturescripts/script e salva como "combat.lua" sem as aspas e cole dentro isso: function onCombat(cid, target) if isPlayer(target) then if getPlayerVocation(cid) == getPlayerVocation(target) then doPlayerSendTextMessage(cid, 27, "Você não pode atacar players da mesma vocação.") return FALSE end return TRUE end end Depois abra o arquivo creaturescript.xml e adicione a tag: <event type="combat" name="AttackVoc" event="script" value="combat.lua"/> Agora entre no arquivo login.lua na pasta data/creaturescripts/scripts e adicione a tag: registerCreatureEvent(cid, "AttackVoc") Se seguir todos os passos concerteza vai funcionar.
-
É o seguinte preciso de uma função em que o player fique recebendo um effect por um determinado tempo. Por exemplo: Eu uso uma spell e o effect 30 fica aparecendo no personagens durante 1 minuto. Quero que esse effect aparece de uma das 2 maneiras que vou citar: 1- Ao player receber um determinada outfit ele comece a receber um effect, até o player não estiver mais com essa determinada outfil. ou 2- Quando o player receber certa storage o effect comecase a aparecer e durace 1 minuto ou até essa determinada storage receber 0. É isso aew, sei que é meio complicadinho até de entender. Mais valew aew pelo esforço de vocês e espero que consigam resolver o meu problema. Prometo desde ja dar Rep+ pra quem me ajudar.
-
LordXD2010, nem tenho tempo pra fazer isso desculpa aew. :confused:
-
OcruxBiel, tenta refazer passo a passo desde o inicio do tutorial. Você deve ter errado algum passo ali no weapons.h ou no weapons.ccp. Depois de refazer, se continuar dando erro, copie e cole o console de erro aqui pra min dar uma olhada! :smile_positivo:
-
OcruxBiel que tipo de erro ocorreu, foi na hora de compilar ou no proprio jogo? Me explica melhor que eu te ajudo, e acho dificil achar algum tutorial de alguem pois eu que criei esse sistema e esse é o unico tutorial. LukasScott, eu criei desse modo pois meu problema,objetivo foi implementar exatamente esse codigo para utilização no meu otserv. E assim foi um meio pelo qual eu consegui fazer isso. E resolvi disponibilizar pra enriqueser o conteudo do :XTibia_smile: com um novo sistema. :icon1: . Se quiser modificar fique a vontade :smile_positivo: Adriez, sua duvida não é relacionada a este topico. Mesmo assim irei sanar sua duvida! Na pasta do seu servidor entre em \weapons\scripts, copia algum arquivo e cole, renomei essa copia para 'sword' sem as aspas. E abra,cole o code e salve: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 0, -1000000, 0, -5000000) function onUseWeapon(cid, var) return doCombat(cid, combat, var) end Agora na pasta \weapons\ , abra o arquivo weapons.xml, adicione a tag abaixo e salve: <melee id="id da espada" level="lvl para usar" script="sword.lua"> </melee> Pronto, esta aew sua sword hitando estilo wand! No arquivo sword você podera mudar '-1000000' e '-5000000' que será a variação de hits. Na linha 'id da espada' e 'lvl para usar' da nova tag você devera mudar conforme quiser.
-
Terminei de desenvolver o sistema, esta disponivel no link: http://www.xtibia.com/forum/topic/167172-two-weapons-system/
-
Esse sistema serve para que você possa usar duas weapons ao mesmo tempo uma em cada slot correspondente as mãos do personagem. Com ele você pode utilizar duas sword's, dois axe's, dois club's ou etc... Esse sistema simplismente soma o attack do item que estiver no slot esquerdo com o attack do item que estiver no slot esquerdo. Aew vai os code para inserir nas sources! Vá em player.ccp e procure por: ret = RET_CANONLYUSEONEWEAPON; Você ira encontrar dois "ret = RET_CANONLYUSEONEWEAPON;", substitua por: ret = RET_NOERROR; Após, localize weapons.h e procure por: const Weapon* getWeapon(const Item* item) const; Embaixo você coloca: static int32_t getAttackLeft; static int32_t getAttackRigth; static int32_t getLeftExtraAttack; static int32_t getRigthExtraAttack; Depois, localize weapons.ccp e procure por: 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(); Substitua por: int32_t WeaponMelee::getWeaponDamage(const Player* player, const Creature* target, const Item* item, bool maxDamage /*= false*/) const { int32_t getAttackLeft; int32_t getAttackRigth; int32_t getLeftExtraAttack; int32_t getRigthExtraAttack; getAttackLeft = 0; getAttackRigth = 0; getLeftExtraAttack = 0; getRigthExtraAttack = 0; if (getAttackLeft == 0) { if (player->getInventoryItem(SLOT_LEFT) != NULL) { getAttackLeft = player->getInventoryItem(SLOT_LEFT)->getAttack(); getLeftExtraAttack = player->getInventoryItem(SLOT_LEFT)->getExtraAttack(); } else if (player->getInventoryItem(SLOT_LEFT) == NULL) { getAttackLeft = 0; getLeftExtraAttack = 0; } } if (getAttackRigth == 0) { if (player->getInventoryItem(SLOT_RIGHT) != NULL) { getAttackRigth = player->getInventoryItem(SLOT_RIGHT)->getAttack(); getRigthExtraAttack = player->getInventoryItem(SLOT_RIGHT)->getExtraAttack(); } else if (player->getInventoryItem(SLOT_RIGHT) == NULL) { getAttackRigth = 0; getRigthExtraAttack = 0; } } int32_t attackValue = std::max((int32_t)0, (int32_t)((getAttackLeft + getLeftExtraAttack + getAttackRigth + getRigthExtraAttack) - elementDamage)); int32_t attackSkill = player->getWeaponSkill(item); float attackFactor = player->getAttackFactor(); Compile e pronto!
-
Bom que todo mundo que comenta aqui tem esse sistema, mais passa a source da weapons que é bom, nada. ashuahu :mellow:
-
Eu acho bastante inovador, pois desde que jogo otserv's nunca vi um assim. Também acho que não deve ser extremamente complicado mais concertesa é muito trabalhoso. E sóh em mecher na distro ja é trabalhoso pra min, fora que não é sóh criar o codigo, tem que criar e modificar um monte de linhas de codigo. Mais séria legal alguem aqui do :XTibia_smile: desenvolver esse sistema e disponibilizar, concertesa o cara seria muito respeitado.
-
Queria um sistema inovador para otserv! Estou criando um otserv, algo mais moderno onde os player's não precisacem usar necessariamente uma "weapon" e um shield. Queria algo mais ou menos assim: Que os player's podessem usar duas swords de uma mão ao mesmo tempo, ou dois clubs, ou até mesmo uma sword e um club. E que os hit's desses itens somasem causando um dano maior e fornecendo skills. Mais ou menos assim, se usasse 2 swords o skill de sword almentase mais rapido, e se eu usase uma sword e um club almentace tanto o skill de sword como o de club também. Isso seria utilizados em muitos otserv's, principalmente os mais modernos assim simulando uma luta mais moderna, distanciando um pouco a era medieval. Não fasso idéia como fazer isso, se alguem tiver alguma sugestão, ja me ajuda. Vlw aew desde ja. Comentem! :smile_positivo:
-
Vlw aew pela sua opnião. :positive: poise também acho essa idéia realmente boa, mais pelo visto ninguem ta muito afim de ajudar :confused:
-
Queria algo inovador para um otserv! Estou criando um otserv, algo mais moderno onde os player's não precisacem usar necessariamente uma "weapon" e um shield. Queria algo mais ou menos assim: Que os player's podessem usar duas swords de uma mão ao mesmo tempo, ou dois clubs, ou até mesmo uma sword e um club. E que os hit's desses itens somasem causando um dano maior e fornecendo skills. Mais ou menos assim, se usasse 2 swords o skill de sword almentase mais rapido, e se eu usase uma sword e um club almentace tanto o skill de sword como o de club também. Isso seria utilizados em muitos otserv's, principalmente os mais modernos assim simulando uma luta mais moderna, distanciando um pouco a era medieval. Não fasso idéia como fazer isso, se alguem tiver alguma sugestão, ja me ajuda. Vlw aew desde ja. Comentem! :smile_positivo:
-
tenta getPlayerPosition(target), algo assim com target!
-
queria que quando o player estivese com uma certa storage ele não podese atacar ninguem. Nem player e nem monstros. RESOLVIDO!!
-
quem que por os unique ID do depot de acordo com o ID da city. Exemplo: a Sky Village tem o ID 1, então todos os deposts dessa city tens que mudar o uniqueID para 1. Se ajudei da +REP.
-
tenta tira esse "return TRUE" do final. E poem o "return" no "doCombat(cid, combat, var)". function onCastSpell(cid, var) if getResets(cid) >= reset_min then doPlayerAddMana(cid, math.random(45000, 55000)) return doCombat(cid, combat, var) else doPlayerSendCancel(cid, "Sorry, you need "..reset_min.." reset's or more to use this spell.") end
-
vai no script do Addoner e cole isso: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function buyAddons(cid, message, keywords, parameters, node) --TODO: buyAddons function in modules.lua if(not npcHandler:isFocused(cid)) then return false end local addon = parameters.addon local cost = parameters.cost local premium = (parameters.premium ~= nil and parameters.premium) if isPlayerPremiumCallback == nil or (isPlayerPremiumCallback(cid) and premium) then if doPlayerRemoveMoney(cid, cost) then doPlayerAddAddons(cid, addon) npcHandler:say('There, you are now able to use all addons!', cid) else npcHandler:say('Sorry, you do not have enough money.', cid) end else npcHandler:say('I only serve customers with premium accounts.', cid) end keywordHandler:moveUp(1) return true end local node1 = keywordHandler:addKeyword({'first addon'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want to buy the first addons set for 5000 gold coins?'}) node1:addChildKeyword({'yes'}, buyAddons, {addon = 1, cost = 5000, premium = true}) node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Too expensive, eh?'}) local node2 = keywordHandler:addKeyword({'second addon'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Would you like to buy the second addons set for 10000 gold coins?'}) node2:addChildKeyword({'yes'}, buyAddons, {addon = 2, cost = 10000, premium = true}) node2:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, moveup = 1, text = 'Too expensive, eh?'}) keywordHandler:addKeyword({'addon'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'I sell the first addons set for 5000 gold coins and the second addons set for 10000 gold coins.'}) npcHandler:addModule(FocusModule:new())
-
meu script: function onUse(cid, item, fromPosition, itemEx, toPosition) local effect = 30 local pos = getPlayerPosition(cid) local exhaustionInSeconds = 70 local storage = 34539 if(exhaustion.check(cid, storage) == TRUE) then if (exhaustion.get(cid, 34539) >= 60) then doPlayerSendCancel(cid, "Voçê só pode invocar após [" .. math.floor(exhaustion.get(cid, 34539) / 60 + 1) .."] minutos.") end if (exhaustion.get(cid, 34539) <= 60) then doPlayerSendCancel(cid, "Voçê só pode invocar após [" .. exhaustion.get(cid, 34539).."] segundos.") end return TRUE end exhaustion.set(cid, storage, exhaustionInSeconds) doPlayerRemoveItem(cid, 5809, 1) doSendMagicEffect(pos, effect) pid = doSummonCreature("DEMON", getPlayerLookPos(cid)) return TRUE end //////////////////////////////////////////////////////////////// Oque acontece é que quando eu clico no item 5809, cria um demon na minha frente e somo o item 5809. Isso acontece sóh quando o item esta na backpack. Exemplo: se eu ponho o item 5809 no chão, eu posso clicar avontade e vai criando varios demons e o item não some. Queria uma solução para isso. Queria que o item sumise ao ser clicado. Vlw aew! RESOLVIDO era sóh usar: doRemoveItem(item.uid, 1) no lugar.
-
esse é o meu action: function onUse(cid, item, fromPosition, itemEx, toPosition) local effect = 30 local pos = getPlayerPosition(cid) local exhaustionInSeconds = 70 local storage = 34539 if(exhaustion.check(cid, storage) == TRUE) then if (exhaustion.get(cid, 34539) >= 60) then doPlayerSendCancel(cid, "Voçê só pode invocar após [" .. math.floor(exhaustion.get(cid, 34539) / 60 + 1) .."] minutos.") end if (exhaustion.get(cid, 34539) <= 60) then doPlayerSendCancel(cid, "Voçê só pode invocar após [" .. exhaustion.get(cid, 34539).."] segundos.") end return TRUE end exhaustion.set(cid, storage, exhaustionInSeconds) doPlayerRemoveItem(cid, 5809, 1) doSendMagicEffect(pos, effect) pid = doSummonCreature("ARMADILHA", getPlayerLookPos(cid)) return TRUE end /////////////// Ele serve para remover um item quando clicado e invocar um npc. Esse é o script do npc: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'inferno') then selfSay('Você não está com medo de mim? Para entrar terá que me responder uma pergunta. Quer tentar quando? Diga: {agora} ou {nunca}.', cid) talkState[talkUser] = 2 elseif talkState[talkUser] == 2 then if msgcontains(msg, 'agora') then selfSay('Qual a cor do cavalo branco de napoleão?', cid) talkState[talkUser] = 3 elseif msgcontains(msg, 'nunca') then selfSay('Okay, então diga {bye}.', cid) talkState[talkUser] = 1 end elseif talkState[talkUser] == 3 then if msgcontains(msg, 'branca') then if getPlayerStorageValue(cid,313131) == -1 then setPlayerStorageValue(cid,31313,1) selfSay('Você acertou, continue a quest! Vá para o Sul!', cid) else selfSay('Você já pode entrar. Não precisava vir aqui denovo.', cid) end else doRemoveCreature(cid) selfSay('Você errou, mate esse monstro. Depois tente denovo! haha!', cid) end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) //////////////////////// Funciona da seguinte forma eu falo hi, inferno, agora, branco, dae ele executa "doRemoveCreature(cid)" , dae o player desloga. Mais eu queria que ao invez do player deslogar o npc sumise. Se nãe for possivel fazer isso, teria como ao executar o primeiro script de conjuração, apos alguns minutos o npc sumise? Espero que tenham entendido, agradeço desde ja a ajuda. Vlw Se ajudar +Rep concerteza!
-
DemonBH, eu sei que vc é muito ocupado + queria te pedir pra da uma olhadinha no meu problema > http://www.xtibia.com/forum/topic/163886-preciso-script-npc-ao-falar-bye-sumir/ <. Tenta ajuda aew, Agradeço desde ja.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.