Ir para conteúdo

MatheusGlad

Conde
  • Total de itens

    528
  • Registro em

  • Última visita

  • Dias Ganhos

    30

Tudo que MatheusGlad postou

  1. local tilepos = {x=136, y=48, z=7} -- Posiçao do tile noroeste ( /\ < ) local sq = 3 -- Area 3x3 usar somente numeros impares > 2 local monster = "Demon" local time = 2 -- Tempo em minutos pra desaparecer local tptime = 10 -- tempo em segundos pra desaparecer tp local tppos = {x=135, y=48, z=7} -- lugar do tp local tpdest = {x=134,y=55, z=7} -- destino do tp function getUidsInArea(extr1, extr2) local dat = {} for y = extr1.y, extr2.y do for x = extr1.x, extr2.x do if isCreature(getThingFromPos({x=x, y=y, z=extr1.z, stackpos=255}).uid) then table.insert(dat, getThingFromPos({x=x, y=y, z=extr1.z, stackpos=255}).uid) end end end return dat end function summonAndRemove(monster, pos, t) local function removeCreatureEvent(uid) if isCreature(uid) then doRemoveCreature(uid) end end local uid = doSummonCreature(monster, pos) addEvent(removeCreatureEvent, t*1000, uid) end function createTpAndRemove(pos, topos, t) local function removeTp(pos) pos.stackpos = 1 local thing = getThingFromPos(pos) if thing.itemid == 1387 then doRemoveItem(thing.uid) end end doCreateTeleport(1387, topos, pos) addEvent(removeTp, t*1000, pos) end function onStepIn(cid, item, pos, frompos) if sq < 3 or sq%2 == 0 then return error("SOMENTE NUMEROS IMPARES MAIORES QUE 2") end local uids = getUidsInArea(tilepos, {x=tilepos.x+sq-1, y=tilepos.y+sq-1, z=tilepos.z}) if #uids == 0 then tppos.stackpos = 1 local tpthing = getThingFromPos(tppos) if tpthing.itemid == 1387 then doRemoveItem(tpthing.uid) end for y = tilepos.y, tilepos.y+sq-1 do for x = tilepos.x, tilepos.x+sq-1 do if y == tilepos.y+(sq-1)/2 and x == tilepos.x+(sq-1)/2 then doTeleportThing(cid, {x=x, y=y, z=tilepos.z}) else summonAndRemove(monster, {x=x, y=y, z=tilepos.z}, time*60) end end end addEvent(createTpAndRemove, time*60*1000, tppos, tpdest, tptime) else doTeleportThing(cid,frompos,true) return doPlayerSendCancel(cid, "There is people inside right now.") end end
  2. Essa parte nao faz sentido algum: local array = {} local lvl = {25, 40, 60, 80, 150, 1000} --lvls for i = 1, #lvl do if getPlayerLevel(master) <= lvl[i] then array = headbutt[lvl[i]] break end end local rand = array[math.random(#array)] for j = 1, rand[2] do local poke = doCreateMonster(rand[1], getClosestFreeTile(sid, pos)) doSetMonsterPassive(poke) doWildAttackPlayer(poke, master) end Se voce souber a funçao dessa table "lvls" porque ele nem usa isso no resto do code e esse doCreateMonster(rand[1], ...), rand[1] seria um level daquela table nao monstro. Comenta ou retira essa parte e ve se funciona.
  3. O que voce quiz dizer com "encostar"? Ficar do lado do player? Se for isso soh editando a source pra adicionar funçao onWalk, ou fazer uma gambiarra pra ficar dando check de tanto em tanto tempo no player pra ve se tem alguem do lado dele o que pode acabar lagando, posso fazer mas avisei . Segunda spell: Bem deve funcionar: data\spells\scripts\hook.lua: local range = 7 local interval = 50 -- velocidade do projetil em ms. ex: 1 sqm em 50 ms local stepsinterval = 50 -- velocidade de cada passo que a criatura vai dar ate chegar ao player local mindmg, maxdmg = 50, 100 -- min e max dmg em PLAYER, o dobro em monstros local dirs = { [0] = {0, -1}, [1] = {1, 0}, [2] = {0, 1}, [3] = {-1, 0} } function testTimes(pos, range, dir, interval) for i = 1, range do addEvent(doSendAnimatedText, interval*i, {x=pos.x+dirs[dir][1]*i, y=pos.y+dirs[dir][2]*i, z=pos.z}, i, 180) end end function forceWalk(cid, dir, distance, interval) local pos = getCreaturePosition(cid) local function teleportCreatureEvent(cid, topos) if isCreature(cid) then doTeleportThing(cid, topos, true) end end if interval > 0 then for i = 1, distance do addEvent(teleportCreatureEvent, i*interval, cid, {x=pos.x+dirs[dir][1]*i, y=pos.y+dirs[dir][2]*i, z=pos.z}) end else doTeleportThing(cid, {x=pos.x+dirs[dir][1]*distance, y=pos.y+dirs[dir][2]*distance, z=pos.z}) end return true end function isWalkable(pos) pos.stackpos = 1 local tile = getThingFromPos(pos) if not getTileInfo(pos).protection and (tile.itemid == 0 or (not isCreature(tile.uid) and not hasProperty(tile.uid, 0) and not hasProperty(tile.uid, 2) and not hasProperty(tile.uid, 3))) then return true end return false end function onCastSpell(cid, var) local playerpos = getPlayerPosition(cid) local dir = getPlayerLookDir(cid) local distance, target for d = 1, range do local uid = getThingFromPos({x=playerpos.x+dirs[dir][1]*d, y=playerpos.y+dirs[dir][2]*d, z=playerpos.z, stackpos=255}).uid if isCreature(uid) and not getTileInfo({x=playerpos.x+dirs[dir][1]*d, y=playerpos.y+dirs[dir][2]*d, z=playerpos.z}).protection then distance = d target = uid break end if not isWalkable({x=playerpos.x+dirs[dir][1]*d, y=playerpos.y+dirs[dir][2]*d, z=playerpos.z}) then distance = d break end end if distance then doSendDistanceShoot(playerpos, {x=playerpos.x+dirs[dir][1]*distance, y=playerpos.y+dirs[dir][2]*distance, z=playerpos.z}, 2) if target then addEvent(forceWalk, interval*distance, target, (dir+2)%4, distance-1, stepsinterval) addEvent(doTargetCombatHealth, interval*distance, cid, target, COMBAT_PHYSICALDAMAGE, -mindmg*2, -maxdmg*2, nil) end else doSendDistanceShoot(playerpos, {x=playerpos.x+dirs[dir][1]*range, y=playerpos.y+dirs[dir][2]*range, z=playerpos.z}, 2) end --testTimes(playerpos, range, dir, interval) return true end tag: <instant name="Hook" words="fresh meat" lvl="8" mana="1" exhaustion="2000" needlearn="0" event="script" value="hook.lua"> <vocation id="1"/> <vocation id="2"/> <vocation id="3"/> <vocation id="4"/> <vocation id="5"/> <vocation id="6"/> <vocation id="7"/> <vocation id="8"/> </instant> Como voce nao deixou claro se a criatura atingida pela "arrow" seria "arrastada" ou simplesmente dar teleport eu botei os dois, soh botar o stepsinterval = 0 pra dar teleport O problema eh que nao tem como eu fazer uma funçao pra desativar os movimentos do player enquanto ele esta sendo arrastado, isso pode acabar dando bugs, se for o caso voce vai ter que deixar o stepsinterval = 0 e o player nao vai ser arrastado
  4. O erro foi em [24/11/2015 19:30:47] data/lib/order.lua:248: attempt to get length of local 'array' (a nil value) Voce passou o data/actions/scripts/order.lua.
  5. data\movements\scripts\nomedoscript.lua: local tilepos = {x=136, y=48, z=7} -- Posiçao do tile noroeste ( /\ < ) local sq = 3 -- Area 3x3 usar somente numeros impares > 2 local monster = "Demon" local time = 2 -- Tempo em minutos pra desaparecer function getUidsInArea(extr1, extr2) local dat = {} for y = extr1.y, extr2.y do for x = extr1.x, extr2.x do if isCreature(getThingFromPos({x=x, y=y, z=extr1.z, stackpos=255}).uid) then table.insert(dat, getThingFromPos({x=x, y=y, z=extr1.z, stackpos=255}).uid) end end end return dat end function summonAndRemove(monster, pos, t) local function removeCreatureEvent(uid) if isCreature(uid) then doRemoveCreature(uid) end end local uid = doSummonCreature(monster, pos) addEvent(removeCreatureEvent, t*1000, uid) end function onStepIn(cid, item, pos, frompos) if sq < 3 or sq%2 == 0 then return error("SOMENTE NUMEROS IMPARES MAIORES QUE 2") end local uids = getUidsInArea(tilepos, {x=tilepos.x+sq-1, y=tilepos.y+sq-1, z=tilepos.z}) if #uids == 0 then for y = tilepos.y, tilepos.y+sq-1 do for x = tilepos.x, tilepos.x+sq-1 do if y == tilepos.y+(sq-1)/2 and x == tilepos.x+(sq-1)/2 then doTeleportThing(cid, {x=x, y=y, z=tilepos.z}) else summonAndRemove(monster, {x=x, y=y, z=tilepos.z}, time*60) end end end else doTeleportThing(cid,frompos,true) return doPlayerSendCancel(cid, "There are people inside right now.") end end xml: <movevent type="StepIn" actionid="2930" event="script" value="nomedoscript.lua"/>
  6. Essa spell nao foi feita por mim apenas a funçao getTime, w/e usa esse: function getTime(s) -- função by : mkalo local n = math.floor(s / 60) s = s - (60 * n) return n, s end local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat1, COMBAT_PARAM_EFFECT, 3) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, 6) setAttackFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 0, 4.8) arr1 = { {0, 0, 0}, {0, 3, 0}, {0, 0, 0}, } arr2 = { {0, 1, 1, 1, 0}, {1, 1, 1, 1, 1}, {1, 1, 3, 1, 1}, {1, 1, 1, 1, 1}, {0, 1, 1, 1, 0}, } local area1 = createCombatArea(arr1) setCombatArea(combat1, area1) local area2 = createCombatArea(arr2) setCombatArea(combat2, area2) local function onCastSpell1(parameters) doCombat(parameters.cid, combat1, parameters.var) end local function onCastSpell2(parameters) if isCreature(parameters.cid) then if not getTilePzInfo(getPlayerPosition(parameters.cid)) then doCombat(parameters.cid, combat2, parameters.var) end end end local exhaustion = {} function onCastSpell(cid, var) local parameters = { cid = cid, var = var} local pos = getPlayerPosition(cid) local tempo = 3 -- tempo em segundos para acontecer a explosão. local cd = 0 -- tempo em segundos para usar a explosão. local i = 0 local tempo2 = 0 addEvent(onCastSpell1, 100, parameters) addEvent(onCastSpell2, 1000*tempo, parameters) addEvent(doSendAnimatedText, 300*tempo, pos, "3", TEXTCOLOR_RED) addEvent(doSendAnimatedText, 550*tempo, pos, "2", TEXTCOLOR_RED) addEvent(doSendAnimatedText, 850*tempo, pos, "1", TEXTCOLOR_RED) return true end
  7. MatheusGlad

    Item de reflect

    local itens = { [2463] = 20, [2646] = 100, } function playerHasItemEquipped(cid, itemid) if not isPlayer(cid) then return false end for i = CONST_SLOT_FIRST, CONST_SLOT_LAST-1 do if getPlayerSlotItem(cid, i).itemid == itemid then return true end end end function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS then if isCreature(attacker) then local total = 0 for itemid, percentage in pairs(itens) do if playerHasItemEquipped(cid, itemid) then total = total+percentage end end if total > 0 then if isPlayer(attacker) then doTargetCombatHealth(cid, attacker, combat, -math.ceil((total/100)*value)*2, -math.ceil((total/100)*value)*2, nil) else doTargetCombatHealth(cid, attacker, combat, -math.ceil((total/100)*value), -math.ceil((total/100)*value), nil) end end end end return true end Agora eu testei, funcionou aqui. Soh que ainda tem um problema que voce não deve ter pensado, se dois players tiverem 100% ou mais de reflect, os dois morrem assim que se hitarem e se for menor que 100% eles vao tomar varios danos.
  8. Retire o == TRUE depois das funçoes isInArray: -------------------------------------- --------- FUSION SYSTEM -------------- -- Ideia Original por: Dias Otonwer -- ----- Melhorado por: Duduzz ---------- -------------------------------------- function onUse(cid,item,fromPosition,itemEx,toPosition) -------------------------------- -------- Configuração ---------- -------------------------------- -- Item 1 -> pedaco de ferro ; Item 2 -> gemas local steel = 5889 -- id do pedaço de ferro ou a materia prima pra fusao. obs: APENAS 1 ID local gems = {2154,2153,2155,2156,2158} -- id das gemas ou do segundo item para fusao. obs: 2 OU MAIS IDS -- Item 3 -> frozen starlight ou wooden trash (configuravel) local item3 = 2361 -- id do item para criar items raros (frozen starlight). obs: APENAS 1 ID local item4 = 2253-- id do item para criar items fracos (wooden trash). obs: APENAS 1 ID -- Premios local premios = {2542,11301,11302,2645,2124,2173,2195,2466,5803,2414,7402,2498,2498,2520} -- premios fracos. obs: 2 OU MAIS IDS local premiosraros = {6529,8851,8926,8924,2646,8928,2470,2502,2503,2504,2453,2453,7423,6391,2522,2342,2494,2494,11240,11240,2472,2472,2123,2123,2171,2171,2496,2469,2495,2495,8932,2415,2408,2390,8885,8886,8887,8877,8878,8879} -- premios raros. obs: 2 OU MAIS IDS -- Posicoes local pos1 = {x=186,y=39,z=8,stackpos=255} -- posicao do item 1 local pos2 = {x=187,y=39,z=8,stackpos=255} -- posicao do item 2 local pos3 = {x=188,y=39,z=8,stackpos=255} -- posicao do item 3 local pos4 = {x=187,y=39,z=8,stackpos=255} -- posicao do item criado -------------------------------- -- Não mexa em nada abaixo!!! -- -------------------------------- local getpos = {getThingFromPos(pos1),getThingFromPos(pos2),getThingFromPos(pos3)} local randfacil = math.random(1,table.getn(premios)) local resultado = premios[randfacil] local randdificil = math.random(1,table.getn(premiosraros)) local resultado1 = premiosraros[randdificil] if itemEx.itemid == 1945 then if getpos[1].itemid == steel then if isInArray(gems,getpos[2].itemid) and getpos[3].itemid == item4 then doCreateItem(resultado,1,pos4) doRemoveItem(getpos[1].uid,1) doRemoveItem(getpos[2].uid,1) doRemoveItem(getpos[3].uid,1) doSendMagicEffect(pos4,13) doSendMagicEffect(pos3,13) doSendMagicEffect(pos2,13) doSendMagicEffect(pos1,13) doPlayerSendTextMessage(cid,20,"Voce criou um Item!") doTransformItem(itemEx.uid,itemEx.itemid+1) elseif isInArray(gems,getpos[2].itemid) and getpos[3].itemid == item3 then doCreateItem(resultado1,1,pos4) doRemoveItem(getpos[1].uid,1) doRemoveItem(getpos[2].uid,1) doRemoveItem(getpos[3].uid,1) doSendMagicEffect(pos4,13) doSendMagicEffect(pos2,13) doSendMagicEffect(pos3,13) doSendMagicEffect(pos1,13) doPlayerSendTextMessage(cid,20,"Voce criou um Item Raro!") doTransformItem(itemEx.uid,itemEx.itemid+1) else doPlayerSendCancel(cid,"Os items estao errados ou sua ordem esta incorreta.") end else doPlayerSendCancel(cid,"Voce precisa primeiramente da materia prima.") end elseif itemEx.uid == 5396 and itemEx.itemid == 1946 then doTransformItem(itemEx.uid,1945) else doPlayerSendCancel(cid,"Impossivel") end return 1 end
  9. MatheusGlad

    Item de reflect

    local itens = { [2463] = 20, [2646] = 100, } function playerHasItemEquipped(cid, itemid) if not isPlayer(cid) then return false end for i = CONST_SLOT_FIRST, CONST_SLOT_LAST do if getPlayerSlotItem(cid, i).itemid == itemid then return true end end end function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS then if isCreature(attacker) then local total = 0 for itemid, percentage in pairs(itens) do if playerHasItemEquipped(cid, itemid) then total = total+percentage end end if total > 0 then doTargetCombatHealth(cid, attacker, combat, -math.ceil((total/100)*value), -math.ceil((total/100)*value), nil) end end end return true end
  10. MatheusGlad

    Item de reflect

    Versao TFS? Bem se for 0.4: creaturescripts\scripts\reflect.lua local itens = { -- [ID] = porcentagem. [2463] = 20, [2646] = 100, } local effect = 3 -- Numero do efeito ou false function playerHasItemEquipped(cid, itemid) if not isPlayer(cid) then return false end for i = CONST_SLOT_FIRST, CONST_SLOT_LAST do if getPlayerSlotItem(cid, i).itemid == itemid then return true end end end function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS then if isCreature(attacker) then local total = 0 for itemid, percentage in pairs(itens) do if playerHasItemEquipped(cid, itemid) then total = total+percentage end end if total > 0 then doCreatureAddHealth(attacker, -math.ceil((total/100)*value)) if effect then doSendMagicEffect(getCreaturePosition(attacker), effect) end end end end return true end creaturescripts\scripts\login.lua: Bota "registerCreatureEvent(cid, "Reflect")" depois de function onLogin(cid): function onLogin(cid) registerCreatureEvent(cid, "Reflect") .. .. .. end XML: <event type="statschange" name="Reflect" event="script" value="reflect.lua"/>
  11. local health = 5000 local mana = 2000 function onUse(cid, item, frompos, item2, topos) setCreatureMaxHealth(cid, getCreatureMaxHealth(cid)+health) setCreatureMaxMana(cid, getCreatureMaxMana(cid)+mana) doRemoveItem(item.uid, 1) return true end <action itemid="5957" script="nomedoscript.lua"/> Deve funcionar :x
  12. local itens = { [7773] = {q=2, i=8096}, } function onUse(cid, item, frompos, item2, topos) if not itens[item2.itemid] then return doPlayerSendCancel(cid, "Nao foi possivel evoluir este item.") else if getPlayerItemCount(cid, item.itemid) >= itens[item2.itemid].q then doPlayerRemoveItem(cid, item.itemid, itens[item2.itemid].q) doTransformItem(item2.uid, itens[item2.itemid].i) else return doPlayerSendCancel(cid, "Voce precisa de " .. itens[item2.itemid].q .. " item upgrader.") end end return true end <action itemid="8306" script="nomedoarquivo.lua"/> Deve funcionar
  13. Algoritmo para calcular n digitos de 1 raiz. Como os numeros chegam a ser maiores que 2^1024 voce nao pode trabalhar mais com numeros depois disso. Então eu transformei tudo em string e fiz as funçoes para as operações basicas como multiplicaçao, soma e subtraçao. Não sao perfeitas, não foram feitas para serem perfeitas, nao aceitam numero negativo blabla eu ia fazer mas como pro meu objetivo não ia adiantar muito então decidi nao fazer. http://pastebin.com/Zyv0WB8P Fiz o melhor que eu pude XD: Exemplo: local root = sqroot(5, 100) print("Raiz de 5 com 100 casas decimais:\n" .. root .. "\nO algoritmo demorou " .. os.clock() .. " segundos para finalizar.") Output:
  14. Nada muito importante pra fazer agora,
  15. Para saber se um numero é primo voce só precisa testar se ele é multiplo de 2 ate a raiz desse numero. Sua funçao demora 7.565 segundos para pegar o range de 2 ate 100000 Ja esta aqui leva 0.198 segundos. function getPrimes(range) range = range or 2 local ret = {} local function isPrime(n) for d = 2, math.sqrt(n) do if n % d == 0 then return false end end return true end for i = 2, range do if isPrime(i) then table.insert(ret, i) end end return ret end
  16. Tente usar somente o string.match assim. file:read("*a"):match("<group id=\"" .. groupId .. "\" name=\"(.-)\"") Isso deve retornar o nome do grupo.
  17. function string.explode(e, sep) local result = {} e:gsub("[^".. sep .."]+", function(s) table.insert(result, s:match("^%s*(.-)%s*$")) end) return result end By: Socket, velho amigo.
  18. Let me see you stripped (8)
  19. Uma funçao nao precisa obrigatoriamente de parametros pra funcionar Ai sim faltou o parametro cid, no seu exemplo cid = nil.
  20. Nukei o tibia.com achei uma falha no site kkk
  21. http://www.xtibia.com/forum/topic/191796-npc-que-usa-outro-item-como-dinheiro/ Acho que isso resolve o problema
  22. Bem, eu fiz algumas alteraçoes no Npc System para que isso fosse possivel, tambem fiz alteraçoes na source, porem as modificaçoes da source nao sao obrigatorias, porem para um otserver serio seria bem legal implementa-las. Video: Download dos arquivos ja modificados: Npc System Modified.rar Ou entao modifique voce mesmo. Entao vamos as alteraçoes: Vá em data\npc\lib\npcsystem, todas as alteraçoes serao nos arquivos desta pasta entao nao vou ficar falando o destino. npchandler.lua: Procure por: Em baixo adicione essa linha: Procure por: Substitua por: Procure por: Substitua por: Agora Procure por: Mude para: Procure por: Mude para: modules.lua: Procure por: Embaixo bote: Procure por: Substitua Toda a funçao por: function ShopModule:callbackOnBuy(cid, itemid, subType, amount, ignoreCap, inBackpacks, moneyId) local shopItem = nil if amount <= 0 or type(amount) ~= "number" then amount = 1 end for _, item in ipairs(self.npcHandler.shopItems) do if(item.id == itemid and item.subType == subType) then shopItem = item break end end if(shopItem == nil) then error("[shopModule.onBuy]", "Item not found on shopItems list") return false end if(shopItem.buy == -1) then error("[shopModule.onSell]", "Attempt to purchase an item which only sellable") return false end local backpack, totalCost = 1988, amount * shopItem.buy if(inBackpacks) then totalCost = not moneyId and (totalCost + (math.max(1, math.floor(amount / getContainerCapById(backpack))) * 20)) or totalCost end local parseInfo = { [TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = totalCost, [TAG_ITEMNAME] = shopItem.name, [TAG_MONEYNAME] = moneyId and getItemNameById(moneyId) or "gold" } if (not moneyId and getPlayerMoney(cid) < totalCost) or (moneyId and getPlayerItemCount(cid, moneyId) < totalCost) then local msg = self.npcHandler:getMessage(MESSAGE_NEEDMONEY) doPlayerSendCancel(cid, self.npcHandler:parseMessage(msg, parseInfo)) return false end local subType = shopItem.subType or 1 local a, b = doNpcSellItem(cid, itemid, amount, subType, ignoreCap, inBackpacks, backpack) if(a < amount) then local msgId = MESSAGE_NEEDMORESPACE if(a == 0) then msgId = MESSAGE_NEEDSPACE end local msg = self.npcHandler:getMessage(msgId) parseInfo[TAG_ITEMCOUNT] = a doPlayerSendCancel(cid, self.npcHandler:parseMessage(msg, parseInfo)) if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then self.npcHandler.talkStart[cid] = os.time() else self.npcHandler.talkStart = os.time() end if(a > 0) then if not moneyId then doPlayerRemoveMoney(cid, ((a * shopItem.buy) + (b * 20))) else doPlayerRemoveItem(cid, moneyId, ((a * shopItem.buy) + (b * 20))) end return true end return false end local msg = self.npcHandler:getMessage(MESSAGE_BOUGHT) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, self.npcHandler:parseMessage(msg, parseInfo)) if not moneyId then doPlayerRemoveMoney(cid, totalCost) else doPlayerRemoveItem(cid, moneyId, totalCost) end if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then self.npcHandler.talkStart[cid] = os.time() else self.npcHandler.talkStart = os.time() end return true end Agora procure por: Substitua toda a funçao por: function ShopModule:callbackOnSell(cid, itemid, subType, amount, ignoreCap, inBackpacks, moneyId) local shopItem = nil for _, item in ipairs(self.npcHandler.shopItems) do if(item.id == itemid and item.subType == subType) then shopItem = item break end end if(shopItem == nil) then error("[shopModule.onBuy]", "Item not found on shopItems list") return false end if(shopItem.sell == -1) then error("[shopModule.onSell]", "Attempt to sell an item which is only buyable") return false end local parseInfo = { [TAG_PLAYERNAME] = getPlayerName(cid), [TAG_ITEMCOUNT] = amount, [TAG_TOTALCOST] = amount * shopItem.sell, [TAG_ITEMNAME] = shopItem.name, [TAG_MONEYNAME] = moneyId and getItemNameById(moneyId) or "gold" } if(subType < 1 or getItemInfo(itemid).stackable) then subType = -1 end if(doPlayerRemoveItem(cid, itemid, amount, subType)) then local msg = self.npcHandler:getMessage(MESSAGE_SOLD) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, self.npcHandler:parseMessage(msg, parseInfo)) if not moneyId then doPlayerAddMoney(cid, amount * shopItem.sell) else doPlayerAddItem(cid, moneyId, amount * shopItem.sell) end if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then self.npcHandler.talkStart[cid] = os.time() else self.npcHandler.talkStart = os.time() end return true end local msg = self.npcHandler:getMessage(MESSAGE_NEEDITEM) doPlayerSendCancel(cid, self.npcHandler:parseMessage(msg, parseInfo)) if(NPCHANDLER_CONVBEHAVIOR ~= CONVERSATION_DEFAULT) then self.npcHandler.talkStart[cid] = os.time() else self.npcHandler.talkStart = os.time() end return false end npcsystem.lua: Procure por: Embaixo bote: Agora a parte em C++, lembrando nao é obrigatoria, é mais para uma questao de estetica: protocolgame.cpp: Obs: Isso soh ira funcionar com UMA MOEDA DIFERENTE! Voce pode editar para fazer funcionar com mais, porem tenha certeza que sabe o que esta fazendo. Procure pela funçao: Substitua toda ela por: void ProtocolGame::sendGoods(const ShopInfoList& shop) { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->AddByte(0x7B); std::string value; player->getStorage(97113, value); if (atoi(value.c_str()) != 1) { msg->AddU32(g_game.getMoney(player)); } else { msg->AddU32(player->__getItemTypeCount(9971)); } std::map<uint32_t, uint32_t> goodsMap; if(shop.size() >= 5) { for(ShopInfoList::const_iterator sit = shop.begin(); sit != shop.end(); ++sit) { if(sit->sellPrice < 0) continue; int8_t subType = -1; if(sit->subType) { const ItemType& it = Item::items[sit->itemId]; if(it.hasSubType() && !it.stackable) subType = sit->subType; } uint32_t count = player->__getItemTypeCount(sit->itemId, subType); if(count > 0) goodsMap[sit->itemId] = count; } } else { std::map<uint32_t, uint32_t> tmpMap; player->__getAllItemTypeCount(tmpMap); for(ShopInfoList::const_iterator sit = shop.begin(); sit != shop.end(); ++sit) { if(sit->sellPrice < 0) continue; int8_t subType = -1; if(sit->subType) { const ItemType& it = Item::items[sit->itemId]; if(it.hasSubType() && !it.stackable) subType = sit->subType; } if(subType != -1) { uint32_t count = player->__getItemTypeCount(sit->itemId, subType); if(count > 0) goodsMap[sit->itemId] = count; } else goodsMap[sit->itemId] = tmpMap[sit->itemId]; } } msg->AddByte(std::min(goodsMap.size(), (size_t)255)); std::map<uint32_t, uint32_t>::const_iterator it = goodsMap.begin(); for(uint32_t i = 0; it != goodsMap.end() && i < 255; ++it, ++i) { msg->AddItemId(it->first); msg->AddByte(std::min(it->second, (uint32_t)255)); } } } E na linha msg->AddU32(player->__getItemTypeCount(9971)); aonde esta 9971 voce troca pelo id da sua moeda diferente! player.cpp: Procure por: Voce achara 2 desses em ambos bote isso embaixo: Pronto agora para que um npc use a moeda diferente ou nao voce bota isso no XML dele: Flw
  23. To a 1 mes quase tentando simplificar isso aki e n sai de jeito nenhum hehe Colegio Naval 1986 - 1987: a) 1 b) sqrt(2) c) 2 d) 2*sqrt(2) e) 3*sqrt(2) sqrt(2) = raiz quadrada de 2 '-'
  24. Vei eu falei x = 36 nao cos(x) = 36 '-' E da pra chegar em cos de 36 sem calculadora sim, se nao nao teria essa questao na prova '-' nao pode usar calculadora na prova Eu sei a resposta dificil eh chegar nela sabe Soh ver no wolfram la
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...