-
Total de itens
859 -
Registro em
-
Última visita
-
Dias Ganhos
22
Tudo que Skulls postou
-
Tenta fazer assim: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HEARTS) setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -5, -5, -7, -14) local area = createCombatArea(AREA_CROSS5X5) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end
-
Guarda Avançado[ataca monstros e com opções] [TFS 1.x]
tópico respondeu ao kaleudd de Skulls em NPCs, monsters e raids
Bacana, sempre bom quando postam conteúdo pro 1.x. Tem pouco. Parabens. Abraços -
Bom cara obrigado pela dica, mas não pretendo mexer na source por enquanto. Abraços,
-
Resolvendo a questão do damage ser fisico: function onStatsChange(cid, attacker, STATSCHANGE_HEALTHLOSS, combat, value) local hasdebuff = getPlayerStorageValue(cid, 99881) --storage dada na debuff spell local percent = 2 -- dobro (50% seria 1.5) if hasdebuff <= 0 or combat ~= COMBAT_FIREDAMAGE then return true end if getPlayerStorageValue(cid, 99882) ~= -1 then setPlayerStorageValue(cid, 99882, -1) return true end setPlayerStorageValue(cid, 99882, 0) doTargetCombatHealth(attacker, cid, COMBAT_FIREDAMAGE, -value*percent+value, -value*percent+value, CONST_ME_FIREATTACK) return true end Banana, do jeito que vc fez ele vai dar debuff pra qualquer tipo de ataque.
-
Como eu não consegui mexer nos returns como o felzan fez pro 1.1, eu não tive outra escolha. Se ele der o dano extra como do tipo fogo ele vai entrar num loop infinito de dano, a não ser que vc crie um storagezinho para limitar isso, mas eu não vejo problema do dano extra ser fisico não xP, afinal a animação é de fogo kkk
-
creatureevent Monstros duelando entre si
tópico respondeu ao Skulls de Skulls em Globalevents e Spells
Bom, eu entendo o seu posicionamento. Mas ai eu acho que é mais uma questão de gosto. Eu gosto de ler os códigos linearmente, por isso escrevo da forma que escrevo, do meu ponto de vista fica mais fácil pra mim verificar tudo que é feito escrevendo em cascata. Mas, vou aceitar a sugestão pois, em termos didáticos, é mais fácil ensinar/mostrar um código para alguém com a sua forma de escrita. Valeu. @@Marco Oliveira Obrigado cara! Abraços, editei o que achei pertinente com relação a sugestão do banana. -
Funcionou, porem deu erro na hora de executar: LIBMYSQL.dll missing.. Compartilhei o sisteminha que fiz em lua para tal: http://www.xtibia.com/forum/topic/238899-monstros-duelando-entre-si/
-
Boa noite galera Como levantei no tópico: http://www.xtibia.com/forum/topic/238784-monstros-se-matando/monstros selvagens são todos tratados como amigos e, portanto, não é possível setar target neles com funções de target normal. Além disso, o callBack onTarget() não funciona para monstros. Desde então estou em busca de uma forma de fazer monstros lutarem entre si sem mexer na source e, com algumas sugestões do Lobo @Night Wolf eu consegui chegar a algo bem satisfatório para o que eu precisava. Portanto, compartilho com você a base do sistema (fiz outras coisas para o meu objetivo que acho bobeira postar aqui, mas a base do sistema de luta está aqui). Então vamos lá. Primeiramente, esse sistema é baseado em dois eventos: onThink (que repete de x em x segundos) e onAttack(para evitar que o monstro ataque players quando estiver atacando monstros. Vá em creaturescripts e crie as seguintes tags em creaturescripts.xml: <event type="think" name="monsters" event="script" value="monsters.lua"/> <event type="attack" name="monstersatt" event="script" value="monsters.lua"/> Feito isso, vá na pasta lib (data/lib) e crie um arquivo chamado monsterslib.lua. La dentro coloque: Feito isso, agora crie um arquivo chamado monsters.lua dentro de creaturescripts/scripts, e cole isso dentro Pronto é isso, você tem um pequeno framework configurável para fazer seus monstros se matarem. Para implementar o script no monstro basta ir no arquivo .xml dos monstros que deseja incluir esse sistema e colocar, logo após as defense, a tag: <script> <event name="minionatt"/> <event name="minion"/> </script> Abaixo um exemplo de utilização do framework, simulando uma luta de "raças" entre dwarfs e orcs de diferentes tipos: O código está bem auto explicativo. Qualquer dúvida me avisem. Espero que gostem. Abraços,
-
Funcionou?
-
local config = { useFragHandler = getBooleanFromString(getConfigValue('useFragHandler')), advancedFragList = getBooleanFromString(getConfigValue('advancedFragList')) } function onThink(cid, interval) if(not config.useFragHandler) then return false end local time = os.time() local times = {today = (time - 86400), week = (time - (7 * 86400))} local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC") if(result:getID() ~= -1) then repeat local content = { name = result:getDataString("name"), level = result:getDataInt("level"), date = result:getDataInt("date") } if(content.date > times.today) then table.insert(contents.day, content) elseif(content.date > times.week) then table.insert(contents.week, content) else table.insert(contents.month, content) end until not result:next() result:free() end local size = { day = table.maxn(contents.day), week = table.maxn(contents.week), month = table.maxn(contents.month) } if isPremium(cid) then if size.day >=2 or (size.day + size.week)>=18 or (size.day + size.week + size.month) >=22 then doCreatureSetSkullType(cid, SKULL_RED) end else if size.day >=1 or (size.day + size.week)>=15 or (size.day + size.week + size.month) >=20 then doCreatureSetSkullType(cid, SKULL_RED) end end return true end <event type="think" interval = "1000" name="redskull" event="script" value="redskull.lua"/>
-
É só mudar o percent. 2 é 100% (o dobro) e 1 é 0% (sem acrescimo), qualquer valor intermediário é uma porcentagem. (10% = 1.1)
-
Nada cara, que bom que ajudei. `Precisando estamos ai. Abraços,
-
Sim sim, mas o return dele não da pra fazer do jeito que vc fez, eu acho. Pelo menos nao consegui. Consegui isso: function onStatsChange(cid, attacker, STATSCHANGE_HEALTHLOSS, combat, value) local hasdebuff = getPlayerStorageValue(cid, 99881) --storage dada na debuff spell local percent = 2 -- dobro (50% seria 1.5) if hasdebuff > 0 and combat == COMBAT_FIREDAMAGE then doTargetCombatHealth(attacker, cid, COMBAT_PHYSICALDAMAGE, -value*percent+value, -value*percent+value, CONST_ME_FIREATTACK) end return true end
-
[Arquivado]Quem é você, player? Ganhe 05 REP + Conquista!
tópico respondeu ao Administrador de Skulls em Noticias - Arquivo
Respondido de forma correta então agora, Skulls.- 60 respostas
-
- quem é você?
- player
-
(e 2 mais)
Tags:
-
[Arquivado]Quem é você, player? Ganhe 05 REP + Conquista!
tópico respondeu ao Administrador de Skulls em Noticias - Arquivo
@@Daniel, respondi mas já colocaram meu nome como Player. Não consegui setar para Skulls. Abraços,- 60 respostas
-
- quem é você?
- player
-
(e 2 mais)
Tags:
-
A primeira parte eu ja fiz: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_SKULLVERTICAL) local condition = createConditionObject(CONDITION_PARALYZE) setConditionParam(condition, CONDITION_PARAM_TICKS, 10000) setConditionFormula(condition, 0, 0, 0, 0) setCombatCondition(combat, condition) local function removeDebuff(parameters) setPlayerStorageValue(parameters.target, parameters.key, parameters.value) end function onTargetCreature(cid, target) --if isPlayer(target) then registerCreatureEvent(target, "debuff") parameters = {target = target, key = 99881, value = 0} setPlayerStorageValue(parameters.target, parameters.key, 1) addEvent(removeDebuff, 10000, parameters) --end end setCombatCallback(combat, CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature") function onCastSpell(cid, var) return doCombat(cid, combat, var) end Falta esse healthchange ai.. to tentando xD
-
Basicamente isso: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, 10000) setConditionParam(condition, CONDITION_PARAM_SKILL_MELEE, 1) setConditionParam(condition, CONDITION_PARAM_SKILL_FIST, 1) setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCE, 1) setConditionParam(condition, CONDITION_PARAM_STAT_MAGICLEVEL, 1) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setCombatCondition(combat, condition) local outfit = { lookType = 31 , lookHead = 0, lookBody = 0, lookLegs = 0, lookFeet = 0, lookAddons = 0} function undoTransform(cid, itemid1, itemid2) if getPlayerItemCount(cid, itemid1) > 0 then local item = getPlayerItemById(cid, true, itemid1) doTransformItem(item.uid, itemid2) end end function onCastSpell(cid, var) if getPlayerItemCount(cid, 2250) > 0 then local item = getPlayerItemById(cid, true, 2250) doTransformItem(item.uid, 2502) addEvent(undoTransform, 1000, cid, 2502, 2250) doSetCreatureOutfit(cid, outfit, 1000) return doCombat(cid, combat, var) end return false end Agora tem que criar um storage pra controlar isso e adicionar um check no login.lua, se o player logar no meio da magia, quando ele entrar novamente o item retornará ao anterior. Abraços,
-
Bela magia, comente se funcionou.
-
Not that simple, aqui da pau. Sempre da pau.. auehuauhehau Será que o custo é tão alto assim? Pq eu já rodei ele com algo proximo de mil monstros e ficou sussa, mas eu to sozinho no server né? xD " C:\Users\lucas\Downloads\forgottenserver-trunk.r3884\trunk.r3884\dev-cpp\gcc TheForgottenServer_private.rc: No such file or directory. "
-
Quando você diz mudar looktype, o que deseja? Colocar um outfit de monstro/item, mudar para um outfit especifico, mudar so as cores?
-
Valeu, me esclareceu um pouco. O melhor seria usar o creature, mas quando usei o CreatureStorage não deu certo, rs. Não queria que salvasse na db não Na verdade, pra ultima versao que fiz substitui e funcionou. xD
-
Pera, deixa eu ver se eu entendi: O player usa a magia, tudo aquilo acontece e o item x vira y? Após um tempo T y volta a ser x e os efeitos passam, correto?
-
Wolf bacana voce me citar, mas acho que estou longe. Tenho a fundação do poketibia nomeu histórico, mas em termos práticos ajudei esporádica e pontualmente a comunidade. Um dia talvez eu chegue a merecer, quem sabe Daniel, entendi. Valeu
-
Mas engraçado, na teoria cada criatura tem um uid e é nesse uid que vai armazenar o storage, nao? E de qualquer forma, se estiver sobrescrevendo, nao tem problema desde que eu nao use esse storage para players, correto? Tem so que ver se vai funcionar sempre.
-
Bom vou ser sincero, agora que tive tempo de ler por completo seu último post pois estou na estrada. Achei um post e que traz realmente um esboço de uma ideia a ser lapidado e, quem sabe, implantado e nao a imposição como você vinha vendo. Olha, não vou mentir, acho que é uma ideia que tem potencial mas se você ler com calma as minhas sugestões você vai ver que não são tão diferentes assim. A ideia de escolher desenvolvedores, com base na ajuda que dão e no conhecimento dos mesmo, que nao paguem pela area vip e tragam conteúdo para o forum não está longe da ideia de filtrar pessoas que ajudam no fórum e liberar elas de vender seus sistemas. A grande diferença que eu vejo é que, no seu caso, ha uma privatização completa do conteúdo e eu sugiri uma manutenção da area de ajuda e de tutoriais. Então se o cara entra aqui com duvidas ele tem duas areas pra se apoiar e aprender. Agora se ele tem sistemas prontos ele vai recorrer aos produtores, se nas sessoes deles ja existir, ou então vai criar um pedido para receber ofertas de produtores que se disponibilizem a fazer. Assim, acabaria com essa história de vir aqui, pedir um trem pronto e sair fora, manteria os auxílios e criaria uma área de incentivop ara aquelas pessoas que mantém a peteca no ar poderem expor suas coisas e ter algum retorno. @@Caronte Concordo, acho que pra implementar algo do tipo tem que ser pensado e programado def orma gradual, afinal o fórum está com movimento nao muito alto. Uma mudança drástica pode ser prejudicial. @@Daniel Tambem acho que é capitalizar demais o conteúdo daforma que foi proposta inicialmente.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.