Agora, KyoGron disse:Bom.. Eu não usei o padrão dxp pelo fato de eu não gostar muito daquele lua, então aqui está um exemplo do qual eu usei para testes. ^^
local config = {
loginMessage = getConfigValue('loginMessage'),
useFragHandler = getBooleanFromString(getConfigValue('useFragHandler'))
}
function AutoLootinit(cid)
if getPlayerStorageValue (cid, storages.AutoLootCollectAll) == -1 then
setPlayerStorageValue(cid, storages.AutoLootCollectAll, "no")
end
return true
end
function onLogin(cid)
local accountManager = getPlayerAccountManager(cid)
if(accountManager == MANAGER_NONE) then
local lastLogin, str = getPlayerLastLoginSaved(cid), config.loginMessage
if(lastLogin > 0) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
str = "Your last visit was on " .. os.date("%a %b %d %X %Y", lastLogin) .. "."
str = "Seu Personagem sera salvo a cada 30 segundos para evitar rollbacks"
else
str = str
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
elseif(accountManager == MANAGER_NAMELOCK) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hello, it appears that your character has been namelocked, what would you like as your new name?")
elseif(accountManager == MANAGER_ACCOUNT) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hello, type 'account' to manage your account and if you want to start over then type 'cancel'.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hello, type 'account' to create an account or type 'recover' to recover an account.")
end
if getCreatureName(cid) == "Account Manager" then
local outfit = {}
if accountManagerRandomPokemonOutfit then
outfit = {lookType = getPokemonXMLOutfit(oldpokedex[math.random(151)][1])}
else
outfit = accountManagerOutfit
end
doSetCreatureOutfit(cid, outfit, -1)
return true
end
if getPlayerVocation(cid) == 0 then
doPlayerSetMaxCapacity(cid, 0)
doPlayerSetVocation(cid, 1)
setCreatureMaxMana(cid, 6)
doPlayerAddSoul(cid, -getPlayerSoul(cid))
setPlayerStorageValue(cid, 19898, 0)
if getCreatureOutfit(cid).lookType == 128 then
outfit = {lookType = 510, lookHead = math.random(0, 132), lookBody = math.random(0, 132), lookLegs = math.random(0, 132), lookFeet = math.random(0, 132)}
elseif getCreatureOutfit(cid).lookType == 136 then
outfit = {lookType = 511, lookHead = math.random(0, 132), lookBody = math.random(0, 132), lookLegs = math.random(0, 132), lookFeet = math.random(0, 132)}
end
doCreatureChangeOutfit(cid, outfit)
end
if getCreatureName(cid) == "[ADM] One" then
setPlayerGroupId(cid, 15)
doRegainSpeed(cid)
doGetPlayersOnToADM(cid)
else
doSendUpdatesOnlineToADM()
end
doPlayerSetVocation(cid, 10)
doSendPlayerExtendedOpcode(cid, 126, "nao")
doResetPlayerTVSystem(cid)
if not isGod(cid) then
setPlayerGroupId(cid, 1)
doRegainSpeed(cid)
end
if isGod(cid) then -- Resetar diarias se for God
setPlayerStorageValue(cid, storages.miniQuests.storDayTask1, -1)
setPlayerStorageValue(cid, storages.miniQuests.storDayTask2, -1)
setPlayerStorageValue(cid, storages.miniQuests.storDayTask3, -1)
setPlayerStorageValue(cid, storages.miniQuests.storDayTask4, -1)
end
if getPlayerLevel(cid) >= 1 and getPlayerLevel(cid) <= 10 then
doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, 0)
else
doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, (getPlayerLevel(cid) >= 200 and 100 or math.floor(getPlayerLevel(cid)/2)) )
end
doRegainSpeed(cid)
--////// storages \\\\\\--
doEreaseDuel(cid)
setPlayerStorageValue(cid, 500, -1)
setPlayerStorageValue(cid, 8085, 0)
--// duel
setPlayerStorageValue(cid, storages.requestCountPlayer, 0)
setPlayerStorageValue(cid, storages.requestCountPokemon, 0)
setPlayerStorageValue(cid, storages.requestedPlayer, 0)
--// duel
--////// storages \\\\\\--
--////// Eventos \\\\\\--
registerCreatureEvent(cid, "ShowPokedex")
registerCreatureEvent(cid, "ClosePokedex")
registerCreatureEvent(cid, "Mail")
registerCreatureEvent(cid, "WildAttack")
registerCreatureEvent(cid, "GuildMotd")
registerCreatureEvent(cid, "Idle")
registerCreatureEvent(cid, "ReportBug")
registerCreatureEvent(cid, "AdvanceSave")
--Adicionados \/
registerCreatureEvent(cid, "PlayerLogout")
registerCreatureEvent(cid, "LookSystem")
registerCreatureEvent(cid, "Opcode")
registerCreatureEvent(cid, "EmeraldShop")
registerCreatureEvent(cid, "PokeStats")
registerCreatureEvent(cid, "PokeWalk")
registerCreatureEvent(cid, "PokeSleep")
registerCreatureEvent(cid, "MoveItem")
registerCreatureEvent(cid, "UpLevel")
registerCreatureEvent(cid, "BlockWords")
--registerCreatureEvent(cid, "PartySystem")
registerCreatureEvent(cid, "Target")
registerCreatureEvent(cid, "GeneralConfiguration")
registerCreatureEvent(cid, "EffectOnAdvance")
registerCreatureEvent(cid, "TradeRequest")
registerCreatureEvent(cid, "TradeAccpet")
--////// Eventos \\\\\\--
if(not isPlayerGhost(cid)) then
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
end
local legs = getPlayerSlotItem(cid, CONST_SLOT_LEGS)
local ball = getPlayerSlotItem(cid,
if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid ~= 0 then
doItemEraseAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "healthChanged")
end
--doOTCSendPokemonHealth(cid)
--doClearPokemonStatus(cid)
if isRiderOrFlyOrSurf(cid) and ball.uid ~= 0 then
local pokeName = getItemAttribute(ball.uid, "poke")
if isInArray({"ditto", "shiny ditto"}, pokeName:lower()) then
pokeName = getItemAttribute(ball.uid, "copyName")
end
local outfit = getPokemonOutfitToSkill(pokeName)
local speed = getPokemonSpeedToSkill(pokeName)
doSetCreatureOutfit(cid, {lookType = outfit + 351}, -1)
doChangeSpeed(cid, -getCreatureSpeed(cid))
doChangeSpeed(cid, speed)
if isRider(cid) then
setPlayerStorageValue(cid, orderTalks["ride"].storage, 1)
elseif isFly(cid) then
setPlayerStorageValue(cid, orderTalks["fly"].storage, 1)
if not hasSqm(getThingPos(cid)) then
-- doCreateItem(460, 1, getThingPos(cid))
end
elseif isSurf(cid) then
setPlayerStorageValue(cid, orderTalks["surf"].storage, 1) -- rever o markedPos
doChangeSpeed(cid, -getCreatureSpeed(cid))
doChangeSpeed(cid, getPlayerStorageValue(cid, 54844))
end
doTeleportThing(cid, getMarkedSpawnPos(cid))
setPokemonGhost(cid)
end
setPlayerStorageValue(cid, storages.gobackDelay, -1)
setPlayerStorageValue(cid, storages.pokedexDelay, -1)
setPlayerStorageValue(cid, 154585, -1)
AutoLootinit(cid)
--doAddShoppingItem(cid)
-- otclient life
doSendLifePokeToOTC(cid)
-- otclient life
return true
end
local itensShopping = {
[1] = {{2394, 100}, {12344, 25}, {12286, 2}},
[2] = {{2391, 200}, {2393, 100}, {2392, 100}},
[3] = {{12832, 1}},
[4] = {{12286, 1}},
[5] = {premiumDays = 30}
}
function doAddShoppingItem(cid)
local allItems = {}
local compra = 0
local msg = ""
local result = db.getResult("SELECT itemID, compraID FROM playercompras WHERE playerID = '" .. getPlayerGUID(cid) .. "' AND entregue = 0")
if result:getID() ~= -1 then
compra = result:getDataInt("compraID")
allItems[#allItems+1] = result:getDataInt("itemID")
db.executeQuery("UPDATE playercompras SET entregue = 13 WHERE compraID = ".. compra ..";")
while(result:next()) do
allItems[#allItems+1] = result:getDataInt("itemID")
compra = result:getDataInt("compraID")
db.executeQuery("UPDATE playercompras SET entregue = 13 WHERE compraID = ".. compra ..";")
end
end
if #allItems > 0 then
for i = 1, #allItems do
if allItems == 5 then
doPlayerAddPremiumDays(cid, itensShopping[allItems].premiumDays)
msg = "Seu pacote de '30 premium days' foi adicionado a sua conta com sucesso!"
doSendMsg(cid, msg)
else
local bag = doCreateItemEx(12694) -- cubone bag de gratis
for j = 1, #itensShopping[allItems] do
doAddContainerItem(bag, itensShopping[allItems][j][1], itensShopping[allItems][j][2])
end
doPlayerSendMailByName(getCreatureName(cid), bag, 1)
msg = "Os itens que foram comprados pelo shopping foram enviados para seu cp."
doSendMsg(cid, msg)
end
end
end
end
function addSkillsToDB(cid)
local str1 = "INSERT INTO player_skills (player_id, skillid, value, count) VALUES (" .. getPlayerGUID(cid) .. ", 5, 5, 0);"
local str2 = "INSERT INTO player_skills (player_id, skillid, value, count) VALUES (" .. getPlayerGUID(cid) .. ", 6, 5, 0);"
db.executeQuery(str1)
db.executeQuery(str2)
end
A dxp padrão não vem com mods, Você que tem que colocar e por ventura geralmente colocam a mais usada "Cyan ou qualquer outro PDA".. Já que a Items.otb é a mesma coisa xD
Vlw ae












info
Grupo: Banidos
Registrado: 25/01/17
Posts: 108
Reputação: +76
Gênero: Masculino
Char no Tibia: Kyogron
Bom.. Eu não usei o padrão dxp pelo fato de eu não gostar muito daquele lua, então aqui está um exemplo do qual eu usei para testes. ^^
local config = {
loginMessage = getConfigValue('loginMessage'),
useFragHandler = getBooleanFromString(getConfigValue('useFragHandler'))
}
function AutoLootinit(cid)
if getPlayerStorageValue (cid, storages.AutoLootCollectAll) == -1 then
setPlayerStorageValue(cid, storages.AutoLootCollectAll, "no")
end
return true
end
function onLogin(cid)
local accountManager = getPlayerAccountManager(cid)
if(accountManager == MANAGER_NONE) then
local lastLogin, str = getPlayerLastLoginSaved(cid), config.loginMessage
if(lastLogin > 0) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
str = "Your last visit was on " .. os.date("%a %b %d %X %Y", lastLogin) .. "."
str = "Seu Personagem sera salvo a cada 30 segundos para evitar rollbacks"
else
str = str
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
elseif(accountManager == MANAGER_NAMELOCK) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hello, it appears that your character has been namelocked, what would you like as your new name?")
elseif(accountManager == MANAGER_ACCOUNT) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hello, type 'account' to manage your account and if you want to start over then type 'cancel'.")
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Hello, type 'account' to create an account or type 'recover' to recover an account.")
end
if getCreatureName(cid) == "Account Manager" then
local outfit = {}
if accountManagerRandomPokemonOutfit then
outfit = {lookType = getPokemonXMLOutfit(oldpokedex[math.random(151)][1])}
else
outfit = accountManagerOutfit
end
doSetCreatureOutfit(cid, outfit, -1)
return true
end
if getPlayerVocation(cid) == 0 then
doPlayerSetMaxCapacity(cid, 0)
doPlayerSetVocation(cid, 1)
setCreatureMaxMana(cid, 6)
doPlayerAddSoul(cid, -getPlayerSoul(cid))
setPlayerStorageValue(cid, 19898, 0)
if getCreatureOutfit(cid).lookType == 128 then
outfit = {lookType = 510, lookHead = math.random(0, 132), lookBody = math.random(0, 132), lookLegs = math.random(0, 132), lookFeet = math.random(0, 132)}
elseif getCreatureOutfit(cid).lookType == 136 then
outfit = {lookType = 511, lookHead = math.random(0, 132), lookBody = math.random(0, 132), lookLegs = math.random(0, 132), lookFeet = math.random(0, 132)}
end
doCreatureChangeOutfit(cid, outfit)
end
if getCreatureName(cid) == "[ADM] One" then
setPlayerGroupId(cid, 15)
doRegainSpeed(cid)
doGetPlayersOnToADM(cid)
else
doSendUpdatesOnlineToADM()
end
doPlayerSetVocation(cid, 10)
doSendPlayerExtendedOpcode(cid, 126, "nao")
doResetPlayerTVSystem(cid)
if not isGod(cid) then
setPlayerGroupId(cid, 1)
doRegainSpeed(cid)
end
if isGod(cid) then -- Resetar diarias se for God
setPlayerStorageValue(cid, storages.miniQuests.storDayTask1, -1)
setPlayerStorageValue(cid, storages.miniQuests.storDayTask2, -1)
setPlayerStorageValue(cid, storages.miniQuests.storDayTask3, -1)
setPlayerStorageValue(cid, storages.miniQuests.storDayTask4, -1)
end
if getPlayerLevel(cid) >= 1 and getPlayerLevel(cid) <= 10 then
doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, 0)
else
doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, (getPlayerLevel(cid) >= 200 and 100 or math.floor(getPlayerLevel(cid)/2)) )
end
doRegainSpeed(cid)
--////// storages \\\\\\--
doEreaseDuel(cid)
setPlayerStorageValue(cid, 500, -1)
setPlayerStorageValue(cid, 8085, 0)
--// duel
setPlayerStorageValue(cid, storages.requestCountPlayer, 0)
setPlayerStorageValue(cid, storages.requestCountPokemon, 0)
setPlayerStorageValue(cid, storages.requestedPlayer, 0)
--// duel
--////// storages \\\\\\--
--////// Eventos \\\\\\--
registerCreatureEvent(cid, "ShowPokedex")
registerCreatureEvent(cid, "ClosePokedex")
registerCreatureEvent(cid, "Mail")
registerCreatureEvent(cid, "WildAttack")
registerCreatureEvent(cid, "GuildMotd")
registerCreatureEvent(cid, "Idle")
registerCreatureEvent(cid, "ReportBug")
registerCreatureEvent(cid, "AdvanceSave")
--Adicionados \/
registerCreatureEvent(cid, "PlayerLogout")
registerCreatureEvent(cid, "LookSystem")
registerCreatureEvent(cid, "Opcode")
registerCreatureEvent(cid, "EmeraldShop")
registerCreatureEvent(cid, "PokeStats")
registerCreatureEvent(cid, "PokeWalk")
registerCreatureEvent(cid, "PokeSleep")
registerCreatureEvent(cid, "MoveItem")
registerCreatureEvent(cid, "UpLevel")
registerCreatureEvent(cid, "BlockWords")
--registerCreatureEvent(cid, "PartySystem")
registerCreatureEvent(cid, "Target")
registerCreatureEvent(cid, "GeneralConfiguration")
registerCreatureEvent(cid, "EffectOnAdvance")
registerCreatureEvent(cid, "TradeRequest")
registerCreatureEvent(cid, "TradeAccpet")
--////// Eventos \\\\\\--
if(not isPlayerGhost(cid)) then
doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
end
local legs = getPlayerSlotItem(cid, CONST_SLOT_LEGS)
local ball = getPlayerSlotItem(cid,
if getPlayerSlotItem(cid, CONST_SLOT_FEET).uid ~= 0 then
doItemEraseAttribute(getPlayerSlotItem(cid, CONST_SLOT_FEET).uid, "healthChanged")
end
--doOTCSendPokemonHealth(cid)
--doClearPokemonStatus(cid)
if isRiderOrFlyOrSurf(cid) and ball.uid ~= 0 then
local pokeName = getItemAttribute(ball.uid, "poke")
if isInArray({"ditto", "shiny ditto"}, pokeName:lower()) then
pokeName = getItemAttribute(ball.uid, "copyName")
end
local outfit = getPokemonOutfitToSkill(pokeName)
local speed = getPokemonSpeedToSkill(pokeName)
doSetCreatureOutfit(cid, {lookType = outfit + 351}, -1)
doChangeSpeed(cid, -getCreatureSpeed(cid))
doChangeSpeed(cid, speed)
if isRider(cid) then
setPlayerStorageValue(cid, orderTalks["ride"].storage, 1)
elseif isFly(cid) then
setPlayerStorageValue(cid, orderTalks["fly"].storage, 1)
if not hasSqm(getThingPos(cid)) then
-- doCreateItem(460, 1, getThingPos(cid))
end
elseif isSurf(cid) then
setPlayerStorageValue(cid, orderTalks["surf"].storage, 1) -- rever o markedPos
doChangeSpeed(cid, -getCreatureSpeed(cid))
doChangeSpeed(cid, getPlayerStorageValue(cid, 54844))
end
doTeleportThing(cid, getMarkedSpawnPos(cid))
setPokemonGhost(cid)
end
setPlayerStorageValue(cid, storages.gobackDelay, -1)
setPlayerStorageValue(cid, storages.pokedexDelay, -1)
setPlayerStorageValue(cid, 154585, -1)
AutoLootinit(cid)
--doAddShoppingItem(cid)
-- otclient life
doSendLifePokeToOTC(cid)
-- otclient life
return true
end
local itensShopping = {
[1] = {{2394, 100}, {12344, 25}, {12286, 2}},
[2] = {{2391, 200}, {2393, 100}, {2392, 100}},
[3] = {{12832, 1}},
[4] = {{12286, 1}},
[5] = {premiumDays = 30}
}
function doAddShoppingItem(cid)
local allItems = {}
local compra = 0
local msg = ""
local result = db.getResult("SELECT itemID, compraID FROM playercompras WHERE playerID = '" .. getPlayerGUID(cid) .. "' AND entregue = 0")
if result:getID() ~= -1 then
compra = result:getDataInt("compraID")
allItems[#allItems+1] = result:getDataInt("itemID")
db.executeQuery("UPDATE playercompras SET entregue = 13 WHERE compraID = ".. compra ..";")
while(result:next()) do
allItems[#allItems+1] = result:getDataInt("itemID")
compra = result:getDataInt("compraID")
db.executeQuery("UPDATE playercompras SET entregue = 13 WHERE compraID = ".. compra ..";")
end
end
if #allItems > 0 then
for i = 1, #allItems do
if allItems == 5 then
doPlayerAddPremiumDays(cid, itensShopping[allItems].premiumDays)
msg = "Seu pacote de '30 premium days' foi adicionado a sua conta com sucesso!"
doSendMsg(cid, msg)
else
local bag = doCreateItemEx(12694) -- cubone bag de gratis
for j = 1, #itensShopping[allItems] do
doAddContainerItem(bag, itensShopping[allItems][j][1], itensShopping[allItems][j][2])
end
doPlayerSendMailByName(getCreatureName(cid), bag, 1)
msg = "Os itens que foram comprados pelo shopping foram enviados para seu cp."
doSendMsg(cid, msg)
end
end
end
end
function addSkillsToDB(cid)
local str1 = "INSERT INTO player_skills (player_id, skillid, value, count) VALUES (" .. getPlayerGUID(cid) .. ", 5, 5, 0);"
local str2 = "INSERT INTO player_skills (player_id, skillid, value, count) VALUES (" .. getPlayerGUID(cid) .. ", 6, 5, 0);"
db.executeQuery(str1)
db.executeQuery(str2)
end
A dxp padrão não vem com mods, Você que tem que colocar e por ventura geralmente colocam a mais usada "Cyan ou qualquer outro PDA".. Já que a Items.otb é a mesma coisa xD