-
Total de itens
1347 -
Registro em
-
Última visita
-
Dias Ganhos
36
Tudo que Oneshot postou
-
pedido Tem algum programa que identifique fast atk?
pergunta respondeu ao knightkunn de Oneshot em Scripts
@Roksas Não é isso que o dono do tópico quer. Ele quer uma maneira de parar aqueles que usam Elfbot para acelerar os ataques ao máximo. @knightkunn void Player::doAttacking(uint32_t) { if(!lastAttack) lastAttack = OTSYS_TIME() - getAttackSpeed() - 1; else if((OTSYS_TIME() - lastAttack) < getAttackSpeed()) return; if(hasCondition(CONDITION_PACIFIED) && !hasCustomFlag(PlayerCustomFlag_IgnorePacification)) { lastAttack = OTSYS_TIME(); return; } Item* item = getWeapon(false); if(const Weapon* _weapon = g_weapons->getWeapon(item)) { if(_weapon->interruptSwing() && !canDoAction()) { SchedulerTask* task = createSchedulerTask(getNextActionTime(), boost::bind(&Game::checkCreatureAttack, &g_game, getID())); setNextActionTask(task); } else { if((!_weapon->hasExhaustion() || !hasCondition(CONDITION_EXHAUST)) && _weapon->useWeapon(this, item, attackedCreature)) lastAttack = OTSYS_TIME(); updateWeapon(); } } else if(Weapon::useFist(this, attackedCreature)) lastAttack = OTSYS_TIME(); } Isto acima, é um exemplo da parte responsável por administrar os ataques dos jogadores no código-fonte do servidor, é ela que controla o intervalo de tempo entre um ataque e outro. Uma maneira simples de parar o fast attack, é criar uma variável que controle os intervalos de tempo e identifique jogadores que estejam atacando muitas vezes em um curto intervalo. Sendo possível com isso, banir tais jogadores. Abraços. -
function hasItems(position, rangex, rangey, ...) local fromPosition = {x = position.x - rangex, y = position.y - rangey, z = position.z} local toPosition = {x = position.x + rangex, y = position.y + rangey, z = position.z} local items = {...} local match = false for x = fromPosition.x, toPosition.x do for y = fromPosition.y, toPosition.y do local p = {x = x, y = y, z = fromPosition.z} for _, item in ipairs(items) do local w = getTileItemById(p, item) if w.uid > 0 then match = true end end end end return match end Acabou de sair do forno. Utilização: hasItems(getThingPosition(cid), 1, 1, 2112, 2160, 2152, 2148) Irá procurar em uma área de 3X3 ao redor do jogador pelos quatro itens especificados na função, caso ache qualquer um dos quatro, irá retornar true.
-
local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_CREATEITEM, 6139) local area1 = createCombatArea({ {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 2, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 1} }) setCombatArea(combat1, area1) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_CREATEITEM, 6140) local area2 = createCombatArea({ {0, 1, 1, 1, 0}, {0, 0, 0, 0, 0}, {0, 0, 2, 0, 0}, {0, 0, 0, 0, 0}, {1, 1, 1, 1, 0} }) setCombatArea(combat2, area2) local combat3 = createCombatObject() setCombatParam(combat3, COMBAT_PARAM_CREATEITEM, 6142) local area3 = createCombatArea({ {0, 0, 0, 0, 1}, {1, 0, 0, 0, 1}, {1, 0, 2, 0, 1}, {1, 0, 0, 0, 1}, {0, 0, 0, 0, 0} }) setCombatArea(combat3, area3) local combat4 = createCombatObject() setCombatParam(combat4, COMBAT_PARAM_CREATEITEM, 6141) local area4 = createCombatArea({ {1, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 2, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} }) setCombatArea(combat4, area4) local function clean_wood(position) local fromPosition = {x = position.x - 5, y = position.y - 5, z = position.z} local toPosition = {x = position.x + 5, y = position.y + 5, z = position.z} for x = fromPosition.x, toPosition.x do for y = fromPosition.y, toPosition.y do local tile = {x = x, y = y, z = fromPosition.z} for itemid = 6139, 6142 do local wood = getTileItemById(tile, itemid) if wood.uid > 0 then doRemoveItem(wood.uid, 1) doSendMagicEffect(tile, CONST_ME_POFF) end end end end end function onCastSpell(cid, var) doCombat(cid, combat1, var) doCombat(cid, combat2, var) doCombat(cid, combat3, var) doCombat(cid, combat4, var) addEvent(clean_wood, 10 * 1000, getThingPosition(cid)) return true end
-
Estarei atualizando o sistema com alguns fixes como o da possibilidade de refinar itens agrupáveis e adicionando esta possibilidade de criar uma pedra para cada atributo. Abraços.
-
Os melhores webservers em suas melhores verções!
tópico respondeu ao Piabeta Kun de Oneshot em Websites & Layouts
Pede-se pelo menos boa gramática no cargo de Moderação. Versões -
É que depende muito de quais são os parâmetros funcionais do seu servidor nesta função: doAddPlayerBanishment(getPlayerGUID(cid), 3, (os.time() + (24 * 60 * 60)), 12, 2, "[sISTEMA ANTI-BOT]") Testei em duas revisões do The Forgotten Server 0.4.0, uma de 8.62 e outra de 8.71 e obtive total funcionalidade. Se você estiver usando um servidor diferente daqueles que testei, poste aqui, posso descobrir os parâmetros corretos nas sources, mas preciso delas. Abraços.
-
function onUse(cid, item, fromPosition, itemEx, toPosition) local combate = COMBAT_PHYSICALDAMAGE -- tipo de dano p = fromPosition local a0 = {x=p.x, y=p.y-1, z=p.z} local a1 = {x=p.x, y=p.y-2, z=p.z} local a2 = {x=p.x, y=p.y-3, z=p.z} local a3 = {x=p.x, y=p.y-4, z=p.z} local a4 = {x=p.x, y=p.y-5, z=p.z} local end1 = {x=p.x, y=p.y-6, z=p.z} local storage = 3425 -- Nao mexer local MIN_DAMAGE = 100 -- Dano minimo local MAX_DAMAGE = 500 -- Dano maximo local level = 10 -- Level necessario local UID = 1121 -- UniqueId do item local chance = 10 if getPlayerStorageValue(cid,storage) == 1 then doPlayerSendCancel(cid,"You are exhausted.") end if getPlayerLevel(cid) < level then doPlayerSendCancel(cid,"You must be level "..level..".") end if getPlayerLevel(cid) >= level and item.uid == UID and getPlayerStorageValue(cid,storage) == -1 then setPlayerStorageValue(cid,storage,1) addEvent(setPlayerStorageValue,5000,cid,storage,-1) addEvent(doSendDistanceShoot,100,fromPosition, a4, 9) addEvent(doAreaCombatHealth,100,a0, combate, a0, 0, -MIN_DAMAGE, -MAX_DAMAGE, 2) addEvent(doAreaCombatHealth,200,a1, combate, a1, 0, -MIN_DAMAGE, -MAX_DAMAGE, 2) addEvent(doAreaCombatHealth,300,a2, combate, a2, 0, -MIN_DAMAGE, -MAX_DAMAGE, 2) addEvent(doAreaCombatHealth,400,a3, combate, a3, 0, -MIN_DAMAGE, -MAX_DAMAGE, 2) addEvent(doAreaCombatHealth,500,a4, combate, a4, 0, -MIN_DAMAGE, -MAX_DAMAGE, 2) addEvent(doCreateItem,600,1294,1,end1) if math.random(1, 100) > chance then doCreateItem(1294, end1) end addEvent(doSendMagicEffect,600,end1,44) end return TRUE end
-
AGORA PODE POSTAR TUDO EM CAPS LOCK NO TOPICO É
tópico respondeu ao Powerzin de Oneshot em Lixeira Pública
É isso que devia ser feito, usar esse filtro apenas para idiotas que usassem Caps Lock em tudo no titulo do tópico. -
Bugs corrigidos e broadcast adicionado. Abraços.
-
Pronto, achei o problema, estava na função mesmo. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0) local area = createCombatArea({ {1, 1, 1}, {1, 3, 1}, {1, 1, 1} }) setCombatArea(combat, area) local function getPlayerWeaponId(cid) -- By Oneshot local ret = 0 for slot = 6, 5, -1 do local item = getPlayerSlotItem(cid, slot) if item.itemid > 0 and isInArray({1, 2, 3, 5}, getItemInfo(item.itemid).weaponType) then ret = item.itemid break end end return ret end function onUseWeapon(cid, var) if getPlayerWeaponId(cid) == 7438 then doCombat(cid, combat, var) return true end doPlayerSendCancel(cid, "You cannot use this arrow with this ordinary bow.") return false end Sobre o consumo da munição mesmo com a arma incorreta, só com alterações nas sources para ficar legal. Ou você pode colocar para adicionar o item, logo abaixo da mensagem de erro. doPlayerAddItem(cid, 2546, 1) Mas aí só ficaria legal mesmo com um autostack, senão a munição seria removida e o item pararia na mochila ou no chão por exemplo.
-
Já disse, não é possível.
-
Aulas Básicas Com O Sr. Iunix: 2# Lógica, Algorítimos E Organização
tópico respondeu ao iunix de Oneshot em Tutoriais de Scripting
Bom tutorial, espero que a sequência de aulas continue. Gostei da tirinha também. Mas aproveita e esculhamba o título logo: Aulas Básicas com o Senhorito iuniX. Abraços. -
Baixável? Se sim, link, por favor.
-
Então, cara, tenho apenas uma mínima ideia de qual possa ser o problema. O problema pode ser qualquer função interna usada na composição da minha função getPlayerWeaponId(cid) e para resolver, eu preciso do nome correto do servidor global que você usa para ver como ele funciona e porque ele não está retornando um itemid correto.
-
A linha que eu passei acima tem que ser retirada. Por curiosidade, que servidor você usa?
-
No caso, você tirou a linha do ID 2432 do weapons.xml, parecida com essa? <melee id="2432" level="35" unproperly="1" event="function" value="default"/> Mas não deixe de tentar com outro tipo de item que seja bow.
-
Isso que dá copiar um script apenas para ganhar reputação. Não sabe explicar como instalar o script com eficiência para funcionar corretamente. Do jeito que o Darkhaos fez, só é possível usar o sistema com MySQL. Abraços.
-
Não é possível, esses tipos de atributos só podem ser configurados no items.xml,não é possível criar um item que modifique eles. Só criando um atributo falso e um script que se baseie nele, como o Aluccard fez. Mas se você usar vários itens com reflexão, a taxa acumula sim.
-
Não agora que estou um tanto ocupado, mas se você quiser, você pode criar itens que refletem coisas pelo items.xml sem precisar de scripts secundários. Por exemplo, vou pegar a magic plate armor, de ID 2472. <item id="2472" article="a" name="magic plate armor"> <attribute key="description" value="An enchanted gem glows on the plate armor." /> <attribute key="weight" value="8500" /> <attribute key="armor" value="17" /> <attribute key="slotType" value="body" /> </item> Supondo que eu quero que ela reflita 10% de todos os tipos de dano, faço isso: <item id="2472" article="a" name="magic plate armor"> <attribute key="description" value="An enchanted gem glows on the plate armor." /> <attribute key="weight" value="8500" /> <attribute key="armor" value="17" /> <attribute key="reflectpercentall" value="10"/> <attribute key="reflectchanceall" value="100"/> <attribute key="slotType" value="body" /> </item> Assim ela terá 100% de chance de refletir 10% de todos os tipos de dano. Lembrando que só funciona se estiver registrado no movements.xml. Abraços.
-
Bom, não tenho ideia do que seja então, aqui ele adiciona normal a quantidade de skill configurada. Creio que os freezes são normais, principalmente se você não tiver grande quantidade de RAM e um processador rápido. Tente com um personagem de teste, novo, criado do zero. Abraços.
-
Posta para mim, o Item ID 2432 do seu items.xml.
-
Random Newfag appeared!
-
É só agora notei que seu erro tem nada a ver com o que eu fiz. No caso o servidor acusa que a função não existe. Vou tentar criar um sistema parecido sem usar mods, pois eu odeio eles. Abraços.
-
Essa função está errada function getItemReflectPercent(itemid) return getItemAttribute(itemid, "reflectPercent") end Como ela está, ela retorna apenas atributos únicos de itens, e caso eles não existam, retorna nil. Fiz algumas modificações nela e no script: function getItemReflectPercent(item) local reflectPercent = getItemAttribute(item.uid) or getItemInfo(item.itemid).reflectPercent return reflectPercent or 0 end <?xml version="1.0" encoding="UTF-8"?> <mod name="Reflect System" version="0.1" author="Aluccard" contact="" enabled="yes"> <description> Script que funciona para refletir danos para as creatures que o atacar. </description> <event type="login" name="regReflectDamage" event="script"><![CDATA[ function onLogin(cid) registerCreatureEvent(cid,"ReflectDamage") return true end ]]></event> <event type="statschange" name="ReflectDamage" event="script"><![CDATA[ local slotPos = {CONST_SLOT_NECKLACE, CONST_SLOT_FEET, CONST_SLOT_HEAD} function onStatsChange(cid, attacker, type, combat, value) local reflectPercent = 0 local dmg = value local playerPos = getCreaturePosition(cid) local attackerPos = getCreaturePosition(attacker) for i = 1, #slotPos do if getPlayerSlotItem(cid, slotPos[i]).uid > 1 then if getItemReflectPercent(getPlayerSlotItem(cid, slotPos[i])) then reflectPercent = reflectPercent + getItemReflectPercent(getPlayerSlotItem(cid, slotPos[i])) end end end if reflectPercent > 0 then dmg = math.ceil(-value*((100-reflectPercent)/100)) if (dmg < 0) then doCreatureAddHealth(cid, dmg) doSendAnimatedText(playerPos, -dmg, COLOR_RED) doSendMagicEffect(playerPos, 0) else doSendMagicEffect(playerPos, 3) end dmg = math.ceil(-value*(reflectPercent/100)) if (dmg < 0) then doCreatureAddHealth(attacker, dmg) doSendAnimatedText(attackerPos, -dmg, COLOR_RED) doSendDistanceShoot(playerPos, attackerPos, CONST_ANI_SMALLHOLY) end else return true end end]]></event> </mod> Não estou certo se irá funcionar. Abraços.
-
Nessa linha: doPlayerAddSkill(cid, config.skillName, config.skillAmount, true) Troque o true por false. Abraços.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.