-
Total de itens
631 -
Registro em
-
Última visita
-
Dias Ganhos
13
Tudo que jhon992 postou
-
fiz um diferente aqui pra ficar melhor de adicionar os monstros, function removeMonster(pid) if (isMonster(pid) == true) then doRemoveCreature(pid) end end function onThink(interval, lastExecution, thinkInterval) local toPos = {x=2489, y=2388, z=7} -- Canto superior esquerdo do mapa, da area que criara os monstros local fromPos = {x=2506, y=2399, z=7} -- Canto inferior direito do mapa, da area que criara os monstros local monsters = {"Demon", "Morgaroth", "Hydra", "Dragon"} -- Monstros que criara local tempo = 60000 * 1 -- troque apenas o numero 10, que será o minuto para o monstro sumir doBroadcastMessage("Invação de Monstros Poderosos ao leste da cidade!") for i=1, #monsters do pid = doCreateMonster(monsters[i], {x=math.random(toPos.x,fromPos.x), y=math.random(toPos.y,fromPos.y), z=math.random(toPos.z,fromPos.z)}) addEvent(removeMonster, tempo, pid) end return true end Ele criara os monstros dentro da area que tu determinar. Obs: Não testei, qualquer erro me fala.
-
Assm vai criar 2: function removeMonster(pid) if (isMonster(pid) == true) then doRemoveCreature(pid) end end function onThink(interval, lastExecution, thinkInterval) local pos = {x=2456, y=2462, z=7} -- Posição que monstro vai nascer local monster = "Morgaroth" -- Boss que é pra criar local tempo = 60000 * 10 -- troque apenas o numero 10, que será o minuto para o monstro sumir doBroadcastMessage("Invação de Morgaroth ao leste da cidade!") pid = doCreateMonster(monster, pos) addEvent(removeMonster, 6000, pid) pid = doCreateMonster(monster, pos) addEvent(removeMonster, 6000, pid) return true end
-
Esse problema começou do nada ou fisese algo e ocorreu? tenta verificar o seu arquivo "forgottenserver.s3db", pelo visto parece que sua database não possui o account manager, faça um backup e depois substitua o arquivo pelo de outro otserv.
- 4 respostas
-
- [pedido] ajuda acc manager
- 8.54
- (e 3 mais)
-
Fais como o último post meu nesse link: http://www.xtibia.com/forum/topic/174122-raid-system-resolvido/page__p__1143951__hl__+raid%20+jhon992__fromsearch__1#entry1143951
-
Tenta assim: local spellConfig = { {effect = 49, area = createCombatArea({ {1, 1, 1}, {1, 2, 1}, {1, 1, 1}}) }, {effect = 21, area = createCombatArea({ {1, 1, 0, 1, 1}, {1, 1, 1, 1, 1}, {0, 1, 2, 1, 0}, {1, 1, 1, 1, 1}, {1, 1, 0, 1, 1}}) }, {effect = 31, area = createCombatArea({ {0, 0, 1, 0, 0}, {0, 1, 1, 1, 0}, {1, 1, 2, 1, 1}, {0, 1, 1, 1, 0}, {0, 0, 1, 0, 0}}) }, {effect = 39, area = createCombatArea({ {1, 0, 1, 0, 1}, {0, 1, 1, 1, 0}, {0, 1, 2, 1, 0}, {0, 1, 1, 1, 0}, {1, 0, 1, 0, 1}}) }, {effect = 31, area = createCombatArea({ {0, 0, 1, 0, 0}, {0, 1, 1, 1, 0}, {1, 1, 2, 1, 1}, {0, 1, 1, 1, 0}, {0, 0, 1, 0, 0}}) }, {effect = 49, area = createCombatArea({ {1, 1, 0, 1, 1}, {1, 1, 1, 1, 1}, {0, 1, 2, 1, 0}, {1, 1, 1, 1, 1}, {1, 1, 0, 1, 1}}) } } local combats = {} for k, config in ipairs(spellConfig) do combats[k] = createCombatObject() onTargetTile = function(cid, pos) local basePos = getThingPosition(cid) local fromPos = {x=basePos.x-6, y=basePos.y-8, z=basePos.z} doSendDistanceShoot(fromPos, pos, 30) end setCombatCallback(combats[k], CALLBACK_PARAM_TARGETTILE, "onTargetTile") setCombatParam(combats[k], COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE) setCombatParam(combats[k], COMBAT_PARAM_EFFECT, config.effect) setCombatFormula(combats[k], COMBAT_FORMULA_LEVELMAGIC, -0.250, -650, -0.250, -650) setCombatArea(combats[k], config.area) end local function castingSpellTime(p) if(isCreature(p[1]) == TRUE) then doCombat(unpack(p)) end end function onCastSpell(cid, var) if vip.hasVip(cid) == FALSE then doPlayerSendCancel(cid, "Desculpe,Só jogadores vips usam está magia.") return false else for k, combat in ipairs(combats) do addEvent(castingSpellTime, (100*k), {cid, combat, var}) end end return true end
-
, desculpa aew to errando umas coisinha boba. agora acho que foi!
-
ta arrumado la em cima.
-
Duplica um arquivo no data/talkaction/scripts e nomeia para "itemunban" sem as aspas e nele cole: function onSay(cid, words, param, channel) local itemid = 2345 -- id do item que ira remover local j = 0 if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if (getPlayerItemCount(cid, itemid) <= 0) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You no have item.") return true end local account, tmp = getAccountIdByName(param), true if(account == 0) then account = getAccountIdByAccount(param) if(account == 0) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player or account '" .. param .. "' does not exists.") return true end tmp = false end local ban = getBanData(account, BAN_ACCOUNT) if(ban and doRemoveAccountBanishment(account)) then local name = param if(tmp) then name = account end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, name .. " has been " .. (ban.expires == -1 and "undeleted" or "unbanned") .. ".") end if(not tmp) then return true end tmp = getIpByName(param) if(isIpBanished(tmp) and doRemoveIpBanishment(tmp)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "IP Banishment on " .. doConvertIntegerToIp(ip) .. " has been lifted.") end local guid = getPlayerGUIDByName(param, true) if(guid == nil) then return true end ban = getBanData(guid, BAN_PLAYER, PLAYERBAN_LOCK) if(ban and doRemovePlayerBanishment(guid, PLAYERBAN_LOCK)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Namelock from " .. param .. " has been removed.") doPlayerRemoveItem(cid, itemid, 1) j = 1 end ban = getBanData(guid, BAN_PLAYER, PLAYERBAN_BANISHMENT) if(ban and doRemovePlayerBanishment(guid, PLAYERBAN_BANISHMENT)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, param .. " has been " .. (ban.expires == -1 and "undeleted" or "unbanned") .. ".") if (j ~= 1) then doPlayerRemoveItem(cid, itemid, 1) end end return true end Em talkactions.xml cole a tag: <talkaction words="/unban" event="script" value="itemunban.lua"/> Prontinho, sóh tira a outra tag no talkactions.xml que tem o comando /unban.
-
Então fisese algo errado no arquivo Monsterout Seller.xml
-
Para ser o msm item só adicionar a tag da speed no script. Ex: function onEquip(cid, item, slot) local outfit = {lookType = 4} -- looktype doSetCreatureOutfit(cid, outfit, -1) doChangeSpeed(cid, 500) -- speed almenta em 500 doSendMagicEffect(getPlayerPosition(cid),67) -- effect return TRUE end function onDeEquip(cid, item, slot) doRemoveCondition(cid, CONDITION_OUTFIT) doChangeSpeed(cid, -500) -- speed volta ao normal doSendMagicEffect(getPlayerPosition(cid),67) -- effect return TRUE end
-
Vlw aew pelos coments! Espero ter ajudado quem ta começando na area e espero ajudar muito mais.
- 16 respostas
-
- creaturescripts tutorial
- otserv
- (e 2 mais)
-
Falar Coisa "x" Receber Item "x" (Pode Fazer Isso Apenas Uma Vez)
tópico respondeu ao Pexezenho de jhon992 em Lixeira Pública
Esse script vai funcionar da seguinte maneira, quando o player falar: Jezeli nie mozesz uruchomic Ele recebera 1kk e pode ser falado apenas uma vez por conta, pelo que entendi era isso que vc queria. Vai em data/talkactions/script, duplica um arquivo e nomeia para "say_gain" sem as aspas e nele cole: function onSay(cid, words, param, channel) if (param == "nie mozesz uruchomic" and getPlayerStorageValue(cid, 302099+getAccountByName(getCreatureName(cid))) ~= 1) then doPlayerAddItem(cid, 2160, 100) -- troque o 2160 pelo id do item, e o 100 pela quantidade. setPlayerStorageValue(cid, 302099+getAccountByName(getCreatureName(cid)), 1) doSendMagicEffect(getCreaturePosition(cid), 30) -- troque o 30 pelo effect de sua preferencia. return true end return true end Agora em talkactions.xml cole a tag: <talkaction words="Jezeli" event="script" value="say_gain.lua"> </talkaction> -
sóh pra testar o script, com o gm fais o comando "/n Monsterout Seller" sem as aspas.
-
Primeiro implementa o sistema de owner do @Mateus. Depois troca esse seu código por este: -- FIXED BY Cybermaster && Kekox © OTLand.net -- ### CONFIG ### -- message send to player by script "type" (types you can check in "global.lua") SHOP_MSG_TYPE = 19 -- time (in seconds) between connections to SQL database by shop script SQL_interval = 30 -- ### END OF CONFIG ### function onThink(interval, lastExecution) local result_plr = db.getResult("SELECT * FROM z_ots_comunication WHERE `type` = 'login';") if(result_plr:getID() ~= -1) then while(true) do id = tonumber(result_plr:getDataInt("id")) action = tostring(result_plr:getDataString("action")) delete = tonumber(result_plr:getDataInt("delete_it")) cid = getCreatureByName(tostring(result_plr:getDataString("name"))) if isPlayer(cid) == TRUE then local itemtogive_id = tonumber(result_plr:getDataInt("param3")) local itemtogive_count = tonumber(result_plr:getDataInt("param2")) local container_id = tonumber(result_plr:getDataInt("param1")) local container_count = tonumber(result_plr:getDataInt("param4")) local add_item_type = tostring(result_plr:getDataString("param5")) local add_item_name = tostring(result_plr:getDataString("param6")) local received_item = 0 local full_weight = 0 if add_item_type == 'container' then container_weight = getItemWeightById(container_id, 1) if isItemRune(itemtogive_id) == TRUE then items_weight = container_count * getItemWeightById(itemtogive_id, 1) else items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count) end full_weight = items_weight + container_weight else full_weight = getItemWeightById(container_id, itemtogive_count) if isItemRune(container_id) == TRUE then full_weight = getItemWeightById(container_id, 1) else full_weight = getItemWeightById(container_id, itemtogive_count) end end local free_cap = getPlayerFreeCap(cid) if full_weight <= free_cap then if add_item_type == 'container' then local new_container = doCreateItemEx(container_id, 1) local iter = 0 while iter ~= container_count do doAddContainerItem(new_container, itemtogive_id, itemtogive_count) iter = iter + 1 end received_item = doPlayerAddItemEx(cid, new_container) else local new_item = doCreateItemEx(container_id, itemtogive_count) received_item = doPlayerAddItemEx(cid, new_item) end if received_item == RETURNVALUE_NOERROR then setItemOwner(received_item, cid) doPlayerSave(cid, true) doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from Shop.') db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";") db.executeQuery("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";") else doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from Prison Break Shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.') end else doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from Spider shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.') end end if not(result_plr:next()) then break end end result_plr:free() end return TRUE en Fais um backup antes, pq eu não testei.
-
quem sabe o item que você esta tentando usar jah possui uma outra tag no movements.xml. Se possuir apaga as outras tags e testa novamente.
-
Vai em data/movements/scripts, duplica um arquivo e nomeia para "nomedoitem" sem as aspas e nele cole: function onEquip(cid, item, slot) local outfit = {lookType = 4} -- looktype doSetCreatureOutfit(cid, outfit, -1) doSendMagicEffect(getPlayerPosition(cid),67) -- effect return TRUE end function onDeEquip(cid, item, slot) doRemoveCondition(cid, CONDITION_OUTFIT) doSendMagicEffect(getPlayerPosition(cid),67) -- effect return TRUE end Agora em movements.xml cole a tag: <movevent type="Equip" itemid="iddoitem" slot="slotdoitem" event="script" value="nomedoitem.lua"/> <movevent type="DeEquip" itemid="iddoitem" slot="slotdoitem" event="script" value="nomedoitem.lua"/> slots validos: head armor legs hand shield ring necklace feet pickupable Postei pq ja tava criando antes do @mulizeo. E vi que tava mais explicadinho para o usuario.
-
eu vi que n ia usar o cid dentro da função, mais passei sóh pra n deixar sem parametro nenhum. sahdua
- 11 respostas
-
- globalevent
- double
-
(e 4 mais)
Tags:
-
Fiz um script tbm, vou postar pq começei a fazer antes do vod postar o dele. O meu script vai funcionar como um evento. O Gm ordena quando começa e acaba esse evento. Vai em data/creaturescripts/scripts, duplica um arquivo e nomeia para "login_exp" sem as aspas e nele cole: function onLogin(cid) local rate = 2 -- 100% local msg = "Aproveite o evento Doble Exp!" local stor = 13545 -- storage vip if (getGlobalStorageValue(stor) > 0) then doPlayerSetExperienceRate(cid, rate) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, msg) end return TRUE end Em creaturescripts.xml cole a tag: <event type="login" name="Login_Exp" event="script" value="login_exp.lua"/> ------------------------------------------------------------------------------------------------------------ Vai em data/talkactions/scritps e duplica um arquivos, e nomeia para "eventexp" sem as aspas e nele cole: function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end if (param == "open") then if (getGlobalStorageValue(13545) > 0) then doPlayerSendTextMessage(cid, 22, "O evento ja esta aberto.") return true end setGlobalStorageValue(13545, 1) doBroadcastMessage("O evento Double Exp esta aberto, todos os player serão kikados após 10 segundos!") addEvent(RemoveAll, 10000, cid) elseif (param == "close") then if (getGlobalStorageValue(13545) <= 0) then doPlayerSendTextMessage(cid, 22, "O evento ja esta feixado.") return true end setGlobalStorageValue(13545, 0) doBroadcastMessage("O evento Double Exp esta feixado, todos os player serão kikados após 10 segundos!") addEvent(RemoveAll, 10000, cid) end return true end function RemoveAll(cid) local online = getOnlinePlayers() for i=1, #online do if (isPlayer(getPlayerByName(online[i]))) then doRemoveCreature(getPlayerByName(online[i])) end end end Em talkaction.xml cole a tag: <talkaction log="yes" access="5" words="eventxp" event="script" value="eventexp.lua"/> Para abrir o evento basta com o gm usar o comando "eventxp open" e para feixar "eventxp close".
- 11 respostas
-
- globalevent
- double
-
(e 4 mais)
Tags:
-
Primeiro tens que ir em data/XML/outfits.xml e colar as tags dos novos outfits. Exemplo: <outfit id="25"> <list gender="0-3" lookType="159" name="Elf"/> </outfit> <outfit id="26"> <list gender="0-3" lookType="160" name="Dwarf"/> </outfit> Explicando: outfit id = você coloca o numero de identificação, veja o numero da ultima outfit id e coloque o proximo numero, obs: "não é o numero da outfit". gender = male e female. looktype = agora sim e o numero correspondente a outfit do monstro, vc pode descobrir looks diferentes usando o comando "/newtype numero". name = nome que vai aparecer na hra de escolher a out. Você ainda pode usar a tag apenas para premium usar o out, ficaria assim: <outfit id="25" premium="yes"> Depois disso os players ja poderão escolher as outfits de monstros. Agora as que você quiser que os player só possam usar depois de comprar no npc, use tags com tags diferentes, assim: <outfit id="25" quest="40850"> <list gender="0-3" lookType="159" name="Elf"/> </outfit> <outfit id="26" quest="40851"> <list gender="0-3" lookType="160" name="Dwarf"/> </outfit> Ou, apenas premium que comprarem no npc, basta adicionar a tag do premium. Agora criando o npc, vai na pasta data/npc/ duplica um arquivo e nomeia para "Monsterout Seller" sem as aspas e nele cole: <?xml version="1.0" encoding="UTF-8"?> <npc name="Monsterout Seller" script="outseller.lua" walkinterval="2000" floorchange="0"> <health now="999999" max="999999"/> <look type="12" corpse="2212"/> <!-- troque o looktype para o outfit que o npc vai estar --> <parameters> <parameter key="message_greet" value="Eu vendo {monster outfits}!."/> </parameters> </npc> Agora em data/npc/scripts, duplica um arquivo e nomeia para "outseller" sem as aspas e nele cole: 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, 'monster outfits') then selfSay('I Sell outfit {Elf}, {Dwarf}. For 10k each.', cid) talkState[talkUser] = 2 elseif talkState[talkUser] == 2 then if msgcontains(msg, 'Elf') then if (doPlayerRemoveMoney(cid, 10000)) then -- preço que custara o out de elf doSendMagicEffect(getCreaturePosition(cid), 30) -- effect que o player recebera selfSay('Você recebeu o Elf Outfit.', cid) setPlayerStorageValue(cid, 40850) -- aqui você poem o nomero da quest que você setou no outfit.xml para o elf else selfSay('Você não possui dinheiro suficiente.', cid) end talkState[talkUser] = 3 elseif msgcontains(msg, 'Dwarf') then if (doPlayerRemoveMoney(cid, 10000)) then -- preço que custara o out de dwarf doSendMagicEffect(getCreaturePosition(cid), 30) -- effect que o player recebera selfSay('Você recebeu o Dwarf Outfit.', cid) setPlayerStorageValue(cid, 40851) -- aqui você poem o nomero da quest que você setou no outfit.xml para o elf else selfSay('Você não possui dinheiro suficiente.', cid) end talkState[talkUser] = 1 else selfSay('Não posso realizar comprar outfit monster.', cid) end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Agora sóh adicionar o npc no mapa e testar! Fiz rapidinho então ficou meia boca, quando tiver mais tempo ageito o código para ficar mais facil.
-
Uma dica que te dou é usar esse sisteminha: http://www.xtibia.co...p-items-system/ Assim apenas vips poderão usar armas vips. E me passa o teu globalevent que receber o item do site que eu tento adaptar com o script de owner.
-
Boas Vindas Aos Novos Estagiários Do Xtibia.com!
tópico respondeu ao Henrique Moura de jhon992 em Noticias
Vou me empenhar para fazer um ótimo trabalho. E parabéns aos outros escolhidos para a equipe. -
Esse código adiciona 5 leveis ao player que matou um adversario em batalha, se o player tiver o msm ip que o adversario ele recebe uma punição de -50 mil pontos de experiência; Analisando o código por linhas: function onKill(cid, target) local lvl = getPlayerLevel(cid) -- lvl atual do player local nlvl = getPlayerLevel(cid) + 5 -- lvl atual+5 if isPlayer(target) == TRUE then -- se o "ser" que você matou é um player, então if getPlayerIp(cid) ~= getPlayerIp(target) then -- se o seu ip for diferente do ip do cara que você matou, então local exp = (50 * (lvl) * (lvl) * (lvl) - 150 * (lvl) * (lvl) + 400 * (lvl)) / 5 -- faz um calculo estranho, que eu acho que descobre a experiência atual do player. local nexp = (50 * (nlvl) * (nlvl) * (nlvl) - 150 * (nlvl) * (nlvl) + 400 * (nlvl)) / 5 -- faz o msm calculo, mais agora descobre a experiência se o player fosse 5 leveis mais alto. local newexp = nexp - exp -- calcula a diferença de experiência desses 5 leveis. doPlayerAddExp(cid,newexp) -- adiciona essa diferença de exp ao player que matou. doSendAnimatedText(getPlayerPosition(cid), "Orgasmic~", 198) -- solta o animated text "Orgasmic~" no player que matou. else -- se o ip do player que matou for igual ao do player que morreu, então doPlayerAddExperience(cid, -50000) -- remove 50 mil pontos de experiência do player que matou. doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"You have been punished for killing a player of the same IP.") -- manda essa msg no player. end -- o resto da linhas, finalizam condições e a função. end return TRUE end
-
simples na segunda linha: removeOnUse = "yes", substitui por "no": removeOnUse = "no",
-
Tem essa por talkaction: Só criar um arquivo.lua na pasta scripts da pasta talkactions e colar esse código. function onSay(cid, words, param, channel) local pos = getCreaturePosition(cid) if(getTileInfo(pos).protection) then local target = 0 param = param:trim() if(param == '') then pos = getPosByDir(pos, getCreatureLookDirection(cid)) target = getTopCreature(pos).uid else target = getPlayerByNameWildcard(param) if(target ~= 0) then pos = getCreaturePosition(target) if(getDistanceBetween(getCreaturePosition(cid), pos) > 1) then return true end end end local tmp = getCreaturePosition(cid) if(doTeleportThing(cid, pos, true) and not isPlayerGhost(cid)) then doSendMagicEffect(tmp, CONST_ME_POFF) doSendMagicEffect(pos, CONST_ME_TELEPORT) end end return false end Depois poem essa tag no talkactions.xml: <talkaction words="/pass;!pass" event="script" value="nomedoteuscript.lua"/> Troque o nome do script para o que você botou, e para usar em jogo basta /pass ou !pass. Créditos @slawkens.
-
Parabens pelo seu trabalho @Laug, me deixou de boca aberta. Continue buscando conhecimento e melhorando cada dia mais.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.