Terun 1 Postado Agosto 5, 2011 Share Postado Agosto 5, 2011 Meu OT tem o sistema do KYDRAI instalado http://www.xtibia.com/forum/topic/136543-vip-system-by-account-v10/ Mas tenho uma duvida, gostaria que quando o player fala-se !buyvip, ai invez dele ganhar os 30 dias de vip, ganhe um item "X" que ao clicar adicionei 30 dias de vip. tem como? brigadao! Link para o comentário https://xtibia.com/forum/topic/164088-duvida-vip-kydrai/ Compartilhar em outros sites More sharing options...
kmmyrawr 6 Postado Agosto 6, 2011 Share Postado Agosto 6, 2011 Tem sim. O que voce deve fazer: Escolher o item que ao ser uzado adicione os dias de vip. Depois voce tera que criar uma action com o id do item que ao clicar vai adicionar a vip. no momento eu to usando um celular mas assim que possivel e se voce nao conseguir eu edito aqui e coloco o script pra voce. Boa sorte. Link para o comentário https://xtibia.com/forum/topic/164088-duvida-vip-kydrai/#findComment-1080447 Compartilhar em outros sites More sharing options...
Terun 1 Postado Agosto 6, 2011 Autor Share Postado Agosto 6, 2011 Tem sim. O que voce deve fazer: Escolher o item que ao ser uzado adicione os dias de vip. Depois voce tera que criar uma action com o id do item que ao clicar vai adicionar a vip. no momento eu to usando um celular mas assim que possivel e se voce nao conseguir eu edito aqui e coloco o script pra voce. Boa sorte. orra, agradecerei muito, tentei mas sempre da erro, bem complexo esse sistema vip do kidrai, e bem completo tbm Link para o comentário https://xtibia.com/forum/topic/164088-duvida-vip-kydrai/#findComment-1080744 Compartilhar em outros sites More sharing options...
kmmyrawr 6 Postado Agosto 7, 2011 Share Postado Agosto 7, 2011 (editado) Bom, vamos começar. Creio que você ja tenha todos os arquivos do Sistema Vip. Então no arquivo vipaccplayer.lua: function onSay(cid, words, param, channel) if words == "/buyvip" then local price = 1000000 local days = 0 if doPlayerRemoveMoney(cid, price) then doPlayerAddItem(cid, XXXX, 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce comprou o VIP Item!") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa de "..price.." para adicionar "..days.." dia(s) de vip.") end elseif words == "/vipdays" then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUE end Mude o "XXXX" para o ID do item que ao ser usado vai adicionar o numero de dias de VIP. Em data\actions\actions.xml adicione em algum lugar: <action itemid="XXXX" event="script" value="itemvip.lua"/> Mude o "XXXX" para o ID do item que ao ser usado vai adicionar o numero de dias de VIP. E por último, crie um arquivo com o nome itemvip.lua em data\actions\scripts\ function onUse(cid, words, param, channel) if doPlayerRemoveItem(cid,XXXX,1) then addVipDays(cid, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip, agora você possui "..getVipDays(cid).." dia(s) de vip.") end return TRUE end Mude o "XXXX" para o ID do item que ao ser usado vai adicionar o numero de dias de VIP. Editado Agosto 7, 2011 por Kmmy Link para o comentário https://xtibia.com/forum/topic/164088-duvida-vip-kydrai/#findComment-1081030 Compartilhar em outros sites More sharing options...
Terun 1 Postado Agosto 7, 2011 Autor Share Postado Agosto 7, 2011 putz perfeito, era isso mesmo q eu precisava! mais uma duvida, o price 1000 está como gold? como fazer para o preco a ser cobrado seja outro item YYYY Link para o comentário https://xtibia.com/forum/topic/164088-duvida-vip-kydrai/#findComment-1081132 Compartilhar em outros sites More sharing options...
Antharaz 93 Postado Agosto 7, 2011 Share Postado Agosto 7, 2011 Estuda o básico de script antes de postar a dúvida C$%AL#@!!! Não só você, mas a maioria q posta aqui :X Vamos lá... No arquivo vipaccplayer.lua: function onSay(cid, words, param, channel) if words == "/buyvip" then local qnt = 220 local itemid = 2229 local days = 0 if getPlayerItemCount(cid, itemid) > qnt then doPlayerRemoveItem(cid, itemid, qnt) doPlayerAddItem(cid, XXXX, 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce comprou o VIP Item!") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa de "..qnt.." "..getItemNameById(itemid).." para adicionar "..days.." dia(s) de vip.") end elseif words == "/vipdays" then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUE end Onde o XXXX o Kmmy já explicou, em qnt = 220 você coloca a quantidade do item(no caso pus 220), em itemid = 2229 coloque o id do item que deverá ser removido, no caso coloquei o id da skull. Link para o comentário https://xtibia.com/forum/topic/164088-duvida-vip-kydrai/#findComment-1081303 Compartilhar em outros sites More sharing options...
Terun 1 Postado Agosto 10, 2011 Autor Share Postado Agosto 10, 2011 (editado) isso mesmo Antharaz! MUITO OBRIGADO! to dando uma estudada no lua sim, por enquanto to tentando ^^, PARTE 1 RESOLVIDO: só uma coisa, o sistema nao estava totalmente instalado, acertei agora, mas ta dando esse erro quando uso o item que ira dar o vip, o item some mas nao da mensagem nenhuma e apresenta este erro: [09/08/2011 23:47:24] [Error - Action Interface] [09/08/2011 23:47:24] data/actions/scripts/itemvip.lua:onUse [09/08/2011 23:47:24] Description: [09/08/2011 23:47:24] data/lib/vipAccount.lua:78: attempt to compare number with nil [09/08/2011 23:47:24] stack traceback: [09/08/2011 23:47:24] data/lib/vipAccount.lua:78: in function <data/lib/vipAccount.lua:77> [09/08/2011 23:47:24] (tail call): ? [09/08/2011 23:47:24] data/actions/scripts/itemvip.lua:3: in function <data/actions/scripts/itemvip.lua:1> [09/08/2011 23:50:34] > Broadcasted message: "Forcas sobrenaturais circundam as ilhas de squirtles, os mares estao agitados, uma grande tempestade se forma, algo se aproxima.". Arquivos: itemvip.lua actions.xml: <action itemid="7893" event="script" value="itemvip.lua"/> <--Linha 1-->function onUse(cid, words, param, channel) if doPlayerRemoveItem(cid,7893,1) then <--Linha 3 --> addVipDays(cid, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip, agora você possui "..getVipDays(cid).." dia(s) de vip.") end return TRUE end lib/vipAccount.lua --[[ Name: Vip System by Account Version: 1.0 Author: Kydrai Forum: http://www.xtibia.com/forum/topic/136543-vip-system-by-account-v10/ [Functions] -- Install installVip() -- By Account doTeleportPlayersByAccount(acc, topos) getVipTimeByAccount(acc) setVipTimeByAccount(acc, time) getVipDaysByAccount(acc) isVipAccount(acc) addVipDaysByAccount(acc, days) doRemoveVipDaysByAccount(acc, days) getVipDateByAccount(acc) -- By Player doTeleportPlayers(cid, topos) getVipTime(cid) setVipTime(cid, time) getVipDays(cid) isVip(cid) addVipDays(cid, days) doRemoveVipDays(cid, days) getVipDate(cid) ]]-- -- Install function installVip() if db.executeQuery("ALTER TABLE `accounts` ADD viptime INT(15) NOT NULL DEFAULT 0;") then print("[Vip System] Vip System instalado com sucesso!") return TRUE end print("[Vip System] Não foi possível instalar o Vip System!") return FALSE end -- By Account function doTeleportPlayersByAccount(acc, topos) if db.executeQuery("UPDATE `players` SET `posx` = "..topos.x..", `posy` = "..topos.y..", `posz` = "..topos.z.." WHERE `account_id` = "..acc..";") then return TRUE end return FALSE end function getVipTimeByAccount(acc) local vip = db.getResult("SELECT `viptime` FROM `accounts` WHERE `id` = "..acc..";") if vip:getID() == -1 then print("[Vip System] Account not found!") return FALSE end return vip:getDataInt("viptime") end function setVipTimeByAccount(acc, time) if db.executeQuery("UPDATE `accounts` SET `viptime` = "..time.." WHERE `id` = "..acc..";") then return TRUE end return FALSE end function getVipDaysByAccount(acc) local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60)) return days <= 0 and 0 or days end function isVipAccount(acc) return getVipDaysByAccount(acc) > 0 and TRUE or FALSE end function addVipDaysByAccount(acc, days) <--Linha 78--> if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local time = getVipDaysByAccount(acc) == 0 and (timeNow + daysValue) or (vipTime + daysValue) setVipTimeByAccount(acc, time) return TRUE end return FALSE end function doRemoveVipDaysByAccount(acc, days) if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local time = vipTime - daysValue setVipTimeByAccount(acc, (time <= 0 and 1 or time)) return TRUE end return FALSE end function getVipDateByAccount(acc) if isVipAccount(acc) then local vipTime = getVipTimeByAccount(acc) return os.date("%d/%m/%y %X", vipTime) end return FALSE end -- By Player function doTeleportPlayers(cid, topos) doTeleportPlayersByAccount(getPlayerAccountId(cid), topos) end function getVipTime(cid) return getVipTimeByAccount(getPlayerAccountId(cid)) end function setVipTime(cid, time) return setVipTimeByAccount(getPlayerAccountId(cid), time) end function getVipDays(cid) return getVipDaysByAccount(getPlayerAccountId(cid)) end function isVip(cid) return isVipAccount(getPlayerAccountId(cid)) end function addVipDays(cid, days) return addVipDaysByAccount(getPlayerAccountId(cid), days) end function doRemoveVipDays(cid, days) return doRemoveVipDaysByAccount(getPlayerAccountId(cid), days) end function getVipDate(cid) return getVipDateByAccount(getPlayerAccountId(cid)) end Editado: Alterei o itemvip.lua da seguinte maneira e funcionou: itemvip.lua function onUse(cid, words, param, channel) if doPlayerRemoveItem(cid,7893,1) then addVipDays(cid, 30) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou 30 dia(s) de vip, agora você possui "..getVipDays(cid).." dia(s) de vip.") end return TRUE end -------------------- Parte 2 Ultima coisa Para finalizar eu gostaria usar esses 2 sistemas Vip system do Kydrai, como fazer para adaptar? poderiam ajudar? tentei aqui com o isvip mas sem sucesso. <movevent type="StepIn" actionid="13540" event="script" value="vip.lua" /> function onStepIn(cid, item, pos) -- aqui e aonde ele vai teleportar o player se ele nao for vip teleport1 ={x=576, y=1143, z=7} if isPlayer(cid) then if item.actionid == 13540 then vip = getPlayerStorageValue(cid,13540) if vip == -1 then doPlayerSendCancel(cid,"So players Vip podem ter acesso aos Teleports vip.") doTeleportThing(cid,teleport1) else end end end end <movevent type="StepIn" uniqueid="13700" event="script" value="vipe.lua"/> -- Script Vip Sytem 1.0 -- function onStepIn(cid, item, position, fromPosition) local config = { msgDenied = "Você não e vip ,entre em contato com a staff.", msgWelcome = "Seja Bem Vindo a Area vip." } if getPlayerStorageValue(cid,13540) - os.time() <= 0 then doTeleportThing(cid, fromPosition, true) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgDenied) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return TRUE end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgWelcome) return TRUE end Editado Agosto 10, 2011 por TeruN Link para o comentário https://xtibia.com/forum/topic/164088-duvida-vip-kydrai/#findComment-1082347 Compartilhar em outros sites More sharing options...
Posts Recomendados