-
Total de itens
1347 -
Registro em
-
Última visita
-
Dias Ganhos
36
Tudo que Oneshot postou
-
É uma bela sugestão, amigo. Se você quer exclusividade, aconselho pagar algum scripter para fazer isso. Talvez eu esteja desenvolvendo ela para toda a comunidade e postarei aqui no XTibia Um grande abraço.
-
No arquivo XML do seu monstro, por exemplo, quero adicionar um Teddy Bear com ActionID 1000 <loot> <item id="2112" actionid="1000" chance="100000"/> </loot> Abraços.
-
Fico pensando se pesquisar dói. [Gesior Acc] Guild War System Com Escudos Pule os passos sobre o site. E o executável que você estiver usando tem que ter sido compilado com o parâmetro abaixo. -D__WAR_SYSTEM__
-
Olá, data/spells/scripts/wisdom growth.lua local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, 60 * 1000) setConditionParam(condition, CONDITION_PARAM_STAT_MAGICLEVELPERCENT, 110) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end <instant name="Wisdom Growth" words="utito tempo vita" lvl="60" mana="600" prem="0" aggressive="0" selftarget="1" exhaustion="1000" needlearn="0" event="script" value="wisdom growth.lua"> <vocation id="5"/> <vocation id="6"/> </instant> data/spells/scripts/ethereal burst arrow.lua local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA) setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0, -25, 1.8, -50) local area = createCombatArea(AREA_SQUARE1X1) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end <instant name="Ethereal Burst Arrow" words="exori con flam" lvl="40" mana="55" prem="0" range="5" needtarget="1" exhaustion="2000" blockwalls="1" needlearn="0" event="script" value="ethereal burst arrow.lua"> <vocation id="3"/> <vocation id="7"/> </instant> data/spells/scripts/wall demolish.lua function onCastSpell(cid, var) local position = getCreatureLookPosition(cid) local item = getTileItemByType(position, ITEM_TYPE_MAGICFIELD) if item.uid > 0 and item.itemid == 1497 then doRemoveItem(item.uid) doSendMagicEffect(position, CONST_ME_PURPLEENERGY) return true else doPlayerSendCancel(cid, "There is not a magic wall in your path.") return false end end <instant name="Magic Demolish" words="exori vita hur" aggressive="0" lvl="34" mana="28" prem="0" exhaustion="2000" needlearn="0" event="script" value="wall demolish.lua"> <vocation id="4"/> <vocation id="8"/> </instant> data/spells/scripts/death wave.lua local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH) setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 5.4, 10.8) local area = createCombatArea(AREA_SQUAREWAVE5, AREADIAGONAL_SQUAREWAVE5) setCombatArea(combat, area) function onCastSpell(cid, var) return doCombat(cid, combat, var) end <instant name="Death Wave" words="exevo mort hur" lvl="38" mana="170" direction="1" exhaustion="2000" needlearn="0" event="script" value="death wave.lua"> <vocation id="1"/> <vocation id="5"/> </instant>
-
Fiz de cabeça, veja se funciona. local DOOR_LEVER = { [1945] = 1211 [1946] = 1212 } local DOOR_POSITION = {x = 0, y = 0, z = 7} function onUse(cid, item, fromPosition, itemEx, toPosition) if not DOOR_LEVER[item.itemid] then return false end local door = getTileItemById(DOOR_POSITION, DOOR_LEVER[item.itemid]) if door.uid > 0 then doTransformItem(door.uid, DOOR_LEVER[item.itemid]) end doTransformItem(item.uid, (item.itemid == 1945 and 1946 or 1945)) return true end <action uniqueid="28286" event="script" value="NOME_DO_SCRIPT.lua"/> Coloque uniqueid 28286 na alavanca. E MAIS ATENÇÃO DE PRÓXIMA VEZ, DÚVIDAS E PEDIDOS DESSE TIPO SÃO FEITOS AQUI: Pedidos e Dúvidas
-
Versão do servidor?
-
Em actions.xml <action itemid="ID_DO_ITEM" event="script" value="buyvipitem.lua"/> E o script você coloca na pasta data/actions/scripts em uma arquivo chamado buyvipitem.lua
-
local config = { rewards = { {"money", 500}, {2157, 10} } } function onDeath(cid, corpse, lastHitKiller, mostDamageKiller) if isPlayer(lastHitKiller) then local reward = config.rewards[math.random(1, #config.rewards)] if type(reward[1]) == "number" then local item = doCreateItemEx(reward[1], reward[2]) if not item then return true end return doPlayerAddItemEx(lastHitKiller, item) end doPlayerAddMoney(lastHitKiller, reward[2]) doPlayerSendTextMessage(lastHitKiller, MESSAGE_STATUS_CONSOLE_ORANGE, "Você matou ".. getCreatureName(cid) .." e recebeu ".. (reward[1] == "money" and (reward[2] .." GPs") or (reward[2] .." ".. getItemNameById(reward[1]))) ..".") end return true end Você pode configurar recompensas em dinheiro ou itens. Deixei por padrão uma recompensa de 500 gps ou 10 gold nuggets. Abraços.
-
Se seu sistema VIP é esse: Vip System By Account, então: local function getPlayerPremiumPoints(cid) local result, ret = db.getResult("SELECT `premium_points` FROM `accounts` WHERE `id` = ".. getPlayerAccountId(cid) ..";") if(result:getID() == -1 then return false end ret = result:getDataInt("premium_points") result:free() return ret end local VIP_PRICE = 10 -- Quantidade de pontos. local VIP_DAYS = 30 -- Quantidade de dias a ser adicionada. function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerPremiumPoints(cid) < VIP_PRICE then return doPlayerSendCancel(cid, "Você precisa de ".. VIP_PRICE .." premium points.") end addVipDays(cid, 30) db.executeQuery("UPDATE `accounts` SET `premium_points` = ".. getPlayerPremiumPoints(cid) - VIP_PRICE .." WHERE `id` = ".. getPlayerAccountId(cid) ..";") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você comprou ".. VIP_DAYS .." dias de VIP. Obrigado.") return true end Abraços.
-
Vamos acabar com os males, em vez de apenas remediar. Poste por favor o erro que seu Zombie Event mostra no console.
-
Filho da mãe
-
Se você quiser, você pode fazer isso, disponibilizei o código justamente para ser estudado e editado a gosto. O meu sistema permanecerá assim. Um grande abraço. IRONIA
-
dúvida Trokar Efeito Quando O Enemy É Atingido Com Weapons!
pergunta respondeu ao kanxamatheus de Oneshot em Scripts
Depende do seu servidor, muitos não disponibilizam sources, mas praticamente todos se baseiam nas revisões do The Forgotten Server. Deixo para você o link de download delas, você precisará ler tutoriais de compilação, pois isto não é um servidor, é apenas o código-fonte: Download Essa é a revisão 4322, versão 8.7, abraços. -
Sim, não são nativas da linguagem Lua, mas existem nas bibliotecas de praticamente qualquer servidor atual. Observação: Notei que você adora me contrariar em tudo rsrs.
-
Embora esteja em área incorreta, esclarecerei a sua dúvida. Abra o arquivo channels.xml em data/XML, você verá isso: <?xml version="1.0" encoding="UTF-8"?> <channels> <!-- README: 0 - dynamic, reserved for guilds 1 - always acts as Party channel, only "name" tag available 3 - always acts as Rule Violations channel 9 - acts as Help channel- clientsided message 65535 - DO NOT CHANGE THE ID- only "name", "enabled", "active" and "logged" tags available --> <channel id="1" name="Party"/> <channel id="2" name="Staff" access="3"/> <channel id="3" name="Rule Violations" logged="yes"/> <channel id="4" name="Counselor" access="1"/> <channel id="5" name="Game-Chat" level="2"/> <channel id="6" name="Trade" level="8" muted="120" conditionId="2" conditionMessage="You may only place one offer in two minutes."> <vocation id="1-8"/> </channel> <channel id="7" name="Trade-Rookgaard" level="2" muted="120" conditionId="3" conditionMessage="You may only place one offer in two minutes."> <vocation id="0"/> </channel> <channel id="8" name="RL-Chat" level="2"/> <channel id="9" name="Help" logged="yes"/> <!-- <channel id="10" name="My Custom Channel"/> --> <channel id="65535" name="Private Chat Channel"/> </channels> Agora é só colocar muted com o valor em segundos que você quer no canal Help. <channel id="9" name="Help" muted="60" logged="yes"/> No exemplo acima, eu coloquei um mute de 60 segundos ou um minuto.
-
dúvida Trokar Efeito Quando O Enemy É Atingido Com Weapons!
pergunta respondeu ao kanxamatheus de Oneshot em Scripts
Código-fonte do servidor, chamado pela galera de sources. -
dúvida (Action)Problema Alavanca Para Adicionar O Item +10 Rep
pergunta respondeu ao Bennyhappy de Oneshot em Scripts
local monsters = { ["Dragon"] = { {x = 9168, y = 8572, z = 7}, {x = 9175, y = 8558, z = 7}, {x = 9169, y = 8575, z = 7}, {x = 9172, y = 8556, z = 7}, {x = 9173, y = 8567, z = 7}, {x = 9161, y = 8566, z = 7}, {x = 9165, y = 8567, z = 7}, {x = 9163, y = 8557, z = 7}, {x = 9183, y = 8560, z = 7}, {x = 9181, y = 8566, z = 7}, {x = 9165, y = 8560, z = 7} }, ["Dragon Lord Hatchling"] = { {x = 9169, y = 8568, z = 7}, {x = 9178, y = 8573, z = 7}, {x = 9182, y = 8570, z = 7}, {x = 9178, y = 8563, z = 7} }, ["Dragon Lord"] = { {x = 9171, y = 8575, z = 7}, {x = 9184, y = 8557, z = 7}, {x = 9184, y = 8565, z = 7}, {x = 9177, y = 8556, z = 7}, {x = 9168, y = 8558, z = 7}, {x = 9165, y = 8555, z = 7}, {x = 9162, y = 8563, z = 7}, {x = 9175, y = 8575, z = 7}, {x = 9170, y = 8565, z = 7}, {x = 9169, y = 8562, z = 7}, {x = 9177, y = 8567, z = 7} } } local walls = { [{x = 9166, y = 8574, z = 7}] = 9166, [{x = 9173, y = 8569, z = 7}] = 5278, [{x = 9180, y = 8581, z = 7}] = 9165, [{x = 9174, y = 8570, z = 7}] = 5282, [{x = 9176, y = 8573, z = 7}] = 5282 } local function checkFloor(fromPosition, toPosition) for x = fromPosition.x, toPosition.x do for y = fromPosition.y, toPosition.y do local position = {x = x, y = y, z = fromPosition.z} local creature = getTopCreature(position).uid if creature.uid > 0 and isMonster(creature) then return false end doCleanTile(position) end end return true end function onUse(cid, item, fromPosition, itemEx, toPosition) local areaFrom = {x = 9155, y = 9552, z = 7} local areaTo = {x = 9191, y = 8589, z = 7} local areaFrom2 = {x = 9160, y = 8544, z = 6} local areaTo2 = {x = 9188, y = 8583, z = 6} if(checkFloor(areaFrom, areaTo) == false or checkFloor(areaFrom2, areaTo2) == false) then return doPlayerSendCancel(cid, "Sorry, there are already monsters in arena.") end for monster, positions in pairs(monsters) do for _, position in ipairs(positions) do doCreateMonster(monster, position) position.z = position.z - 1 doCreateMonster(monster, position) end end doTransformItem(item.uid, (item.itemid == 1945 and 1946 or 1945)) for position, wall in pairs(walls) do if getTileItemById(position, wall).uid == 0 then doCreateItem(wall, position) position = position.z - 1 doCreateItem(wall, position) end end end Pronto, acho que funciona. O botão ou alavanca irá sumonar e criar paredes nos dois andares. -
Arrumei um pequeno bug no sistema na parte do comando /vote.
-
VÍDEO
-
dúvida Trokar Efeito Quando O Enemy É Atingido Com Weapons!
pergunta respondeu ao kanxamatheus de Oneshot em Scripts
No arquivo game.cpp, precisamente no bool Game::combatChangeHealth. Segue abaixo uma pequena parte dele. case COMBAT_PHYSICALDAMAGE: { Item* splash = NULL; switch(target->getRace()) { case RACE_VENOM: textColor = COLOR_LIGHTGREEN; magicEffect = MAGIC_EFFECT_POISON; splash = Item::CreateItem(ITEM_SMALLSPLASH, FLUID_GREEN); break; case RACE_BLOOD: textColor = COLOR_RED; magicEffect = MAGIC_EFFECT_DRAW_BLOOD; splash = Item::CreateItem(ITEM_SMALLSPLASH, FLUID_BLOOD); break; case RACE_UNDEAD: textColor = COLOR_GREY; magicEffect = MAGIC_EFFECT_HIT_AREA; break; case RACE_FIRE: textColor = COLOR_ORANGE; magicEffect = MAGIC_EFFECT_DRAW_BLOOD; break; case RACE_ENERGY: textColor = COLOR_PURPLE; magicEffect = MAGIC_EFFECT_PURPLEENERGY; break; default: break; } if(splash) { internalAddItem(NULL, target->getTile(), splash, INDEX_WHEREEVER, FLAG_NOLIMIT); startDecay(splash); } break; } No caso você trocaria isso: case RACE_BLOOD: textColor = COLOR_RED; magicEffect = MAGIC_EFFECT_DRAW_BLOOD; splash = Item::CreateItem(ITEM_SMALLSPLASH, FLUID_BLOOD); break; E mudaria o valor de magicEffect. Abraços. -
Não é querendo ser chato não, mas essas funções já existem e se chamam table.serialize e table.unserialize. Um grande abraço.
-
Nome: Advanced Poll System Tipo: Talkaction Autor: Oneshot Fala, meus queridos. Peregrinando pela seção de Pedidos e Dúvidas, vi um pedido do membro sarioyana que despertou minha vontade de programar sistemas um pouco mais elaborados. O pedido dele se trata de um sistema de votação, onde o responsável pelo servidor pode iniciar uma votação com quantas opções desejar. Fiz algo bem simples, você só precisa configurar os storages no ínicio do script, caso você já esteja usando os que estão por padrão. Abra seu arquivo talkactions.xml e adicione isso: <talkaction log="yes" words="/newpoll;/endpoll" access="5" event="script" value="pollsystem.lua"/> <talkaction words="/vote;/poll" event="script" value="pollsystem.lua"/> Crie um novo arquivo chamado pollsystem.lua em data/talkactions/scripts e adicione isso: local POLL_STORAGE = 80000 local OPTIONS_STORAGE = 80001 local PLAYER_STORAGE = 80000 local function getTotalVotes() local options = table.unserialize(getStorage(OPTIONS_STORAGE)) local amount = 0 for _, option in ipairs(options) do amount = amount + option[2] end return amount end local function getMostVotedOption() local options = table.unserialize(getStorage(OPTIONS_STORAGE)) local value, ret = 0 for _, option in ipairs(options) do if option[2] > value then value = option[2] ret = option[1] end end return ret end function onSay(cid, words, param, channel) param = param or "" if param == "" and not words == "/poll" then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The command ".. words .." need parameters.") end local parameters, vote = {} if(words == "/newpoll") then if getStorage(POLL_STORAGE) ~= -1 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sorry, but there is a poll in progress.\nIf you want to start a new poll, type /endpoll.") end parameters = string.explode(param, ",") if #parameters < 3 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The command /newpoll needs a poll and at least two options.") end if parameters[1] then local options = {} for i = 2, #parameters do table.insert(options, {parameters[i], 0}) end if #options < 2 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Insert at least two options after the poll") end doSetStorage(POLL_STORAGE, parameters[1]) options = table.serialize(options) doSetStorage(OPTIONS_STORAGE, options) doBroadcastMessage("A new poll is in progress with the title '".. getStorage(POLL_STORAGE) .."?'!\nSee the status with /poll and vote with /vote.") end elseif(words == "/vote") then vote = tonumber(param) or -1 local options = table.unserialize(getStorage(OPTIONS_STORAGE)) if getStorage(POLL_STORAGE) == -1 then return doPlayerSendCancel(cid, "There is not a poll in progress.") end if vote == -1 then return doPlayerSendCancel(cid, "You need to choose a option to vote.") end if getCreatureStorage(cid, PLAYER_STORAGE) == 1 then print(getCreatureStorage(cid, PLAYER_STORAGE)) return doPlayerSendCancel(cid, "You cannot vote two times.") end if vote > #options then return doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE) end options[vote][2] = options[vote][2] + 1 doSetStorage(OPTIONS_STORAGE, table.serialize(options)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have voted in the option ".. options[vote][1] .." successfully!") doCreatureSetStorage(cid, PLAYER_STORAGE, 1) elseif(words == "/poll") then local options = table.unserialize(getStorage(OPTIONS_STORAGE)) if getStorage(POLL_STORAGE) == -1 then return doPlayerSendCancel(cid, "There is not a poll in progress.") end local text = "ADVANCED poll SYSTEM\n\n".. getStorage(POLL_STORAGE) .."?\n" local count = 1 for _, option in ipairs(options) do text = text .."\n#".. count .." ".. option[1] .." ".. (getTotalVotes() == 0 and 0 or math.floor((option[2]/getTotalVotes()) * 100)) .."%\n" count = count + 1 end doPlayerPopupFYI(cid, text) elseif(words == "/endpoll") then if getStorage(POLL_STORAGE) == -1 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "There is not a poll to be ended.") end if not getMostVotedOption() then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Wait at least one vote to end this poll.") end doBroadcastMessage("The poll '".. getStorage(POLL_STORAGE) .."?' has been finished!\nThe most voted option was ".. getMostVotedOption() ..".") doSetStorage(POLL_STORAGE, -1) doSetStorage(OPTIONS_STORAGE, -1) for _, player in ipairs(getPlayersOnline()) do doCreatureSetStorage(player, PLAYER_STORAGE, -1) end db.executeQuery("UPDATE `player_storage` SET value = -1 WHERE `key` = ".. PLAYER_STORAGE ..";") end return true end E pronto, o sistema está instalado. Basta agora no jogo com um GOD digitar: /newpoll pergunta,opção1,opção2,opção3,... E para finalizar a enquete /endpoll Jogadores podem usar os comandos abaixo para visualizar o estado da enquete e votar, respectivamente. /poll /vote O comando /vote deve ser seguido do número da opção que aparece no comando /poll Irei postar em breve um vídeo, fiquem ligados. Um grande abraço.
-
dúvida Ajudar A Completar Este Script (Ring Atacck Target Com Sd)
pergunta respondeu ao Bennyhappy de Oneshot em Scripts
Fiz de cabeça o script, então não prestei atenção nisso. Enfim, local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT,CONST_ANI_SUDDENDEATH) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -60, -1, -60, 5, 5, 4, 7) local combat_events = {} local function doCombatWithDelay(cid, combat, var, itemid) if isCreature(cid) then doCombat(cid, combat, var) if getPlayerSlotItem(cid, CONST_SLOT_RING) == itemid then combat_events[cid] = addEvent(doCombatWithDelay, 1 * 1000, cid, combat, var, itemid) end end end function onEquip(cid, item, slot) local target = getCreatureTarget(cid) if(target == 0) then return true end doCombat(cid, combat, numberToVariant(target)) combat_events[cid] = addEvent(doCombatWithDelay, 1 * 1000, cid, combat, numberToVariant(target), item.itemid) end function onDeEquip(cid, item, slot) doSendMagicEffect(getThingPosition(cid), CONST_ME_BLOCKHIT) stopEvent(combat_events[cid]) return true end -
local config = { maxLevelDifference = 0.7, experience = 2000 } function onKill(cid, target, lastHit) if(not isPlayer(target)) then return true end if(getCreatureSkull(cid) > 1) then return true end if(getPlayerLevel(target) > getPlayerLevel(cid) or getPlayerLevel(target) >= config.maxLevelDifference * getPlayerLevel(cid)) then return true end local formula = ((config.maxLevelDifference - (getPlayerLevel(target) / getPlayerLevel(cid))) * 100) * config.experience doPlayerAddExperience(cid, -formula) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você não teve honra!\nVocê matou um jogador com ".. getPlayerLevel(cid) - getPlayerLevel(target) .." levels de diferença e, por isso, perderá ".. formula .." pontos de experiência.") return true end Pela fórmula que eu fiz e pude entender do tópico: - Um jogador level 100 mata um jogador level 50 - level 50 é abaixo de 70% de 100 - logo o jogador irá receber uma punição. - Essa punição será - ((0.7 - 50/100) * 100) * 2000 - 40000 pontos de experiência. E não preciso do dinheiro não. Um grande abraço.
- 2 respostas
-
- anti power
- power abuser
- (e 2 mais)
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.