Fala galerinha do Zonaxgames vim aqui postar um sistema de Premium Points inGame, que eu
achei muito útil, pois eu estava tendo sérios problemas com o Shop
System do Modern AAC, ai vai os sistemas.
antes de tudo execute esse comando em seu banco de dados.
ALTER TABLE `accounts` ADD `premium_points` INT NOT NULL DEFAULT 0;
#Sistemas
vá em data/libs e crie um novo arquivo com o nome 048-ppoints.lua
function getAccountPoints(cid)
local res = db.getResult('select `premium_points` from accounts where name = ''..getPlayerAccount(cid)..''')
if(res:getID() == -1) then
return false
end
local ret = res:getDataInt("premium_points")
res:free()
return tonumber(ret)
end
function doAccountAddPoints(cid, count)
return db.executeQuery("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) + count .."' WHERE `name` ='"..getPlayerAccount(cid).."'")
end
function doAccountRemovePoints(cid, count)
return db.executeQuery("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) - count .."' WHERE `name` ='"..getPlayerAccount(cid).."'")
end
vá em data/talkactions/talkactions.xml e adicione as seguintes tags.
vá em data/talkactions/scripts e crie um novo arquivo com o seguinte nome AddPoints.lua
function onSay(cid, words, param, channel)
local split = param:explode(",")
local name, count = split[1], tonumber(split[2])
pid = getPlayerByNameWildcard(name)
if (not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. param .. " is not currently online.")
return TRUE
end
if not(split[2]) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The commands requires 2 parameters: character name, amount")
end
if not(count) then
print(count)
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Numeric parameter required.")
end
doAccountAddPoints(cid, count)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "" .. count .. " premium points were added to " .. getCreatureName(pid) .. "'s Account.")
return true
end
vá em data/talkactions/script e crie um arquivo com o seguinte nome GetPoints.lua
function onSay(cid, words, param, channel)
local pid = 0
if(param == '') then
pid = getCreatureTarget(cid)
if(pid == 0) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")
return TRUE
end
else
pid = getPlayerByNameWildcard(param)
end
if (not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. param .. " is not currently online.")
return TRUE
end
if isPlayer(pid) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "" .. getCreatureName(pid) .. "'s Account has " .. getAccountPoints(cid) .. " premium points.")
return TRUE
end
return TRUE
end
vá em data/talkactions/script e crie um arquivo com o seguinte nome RemovePoints.lua
function onSay(cid, words, param, channel)
local split = param:explode(",")
local name, count = split[1], tonumber(split[2])
local points = getAccountPoints(cid)
pid = getPlayerByNameWildcard(name)
if (not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. param .. " is not currently online.")
return TRUE
end
if not(split[2]) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The commands requires 2 parameters: character name, amount")
end
if not(count) then
print(count)
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Numeric parameter required.")
end
if (points <= 0) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "" .. getCreatureName(pid) .. "'s Account has 0 premium points.")
end
doAccountRemovePoints(cid, count)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "" .. count .. " premium points were deleted from " .. getCreatureName(pid) .. "'s Account.")
return true
end
vá em data/creaturescripts/scripts e crie um novo arquivo com o nome SelfGetPoints.lua
function onLogin(cid)
if isPlayer(cid) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your Account has " .. getAccountPoints(cid) .. " premium points.")
end
return TRUE
end
declare ele no creaturescripts.xml
#Scripts
aqui está um exemplo de talkaction para mudar o sexo do personagem usando o sistema de points.
local config = {
costPremiumDays = 2
}
function onSay(cid, words, param, channel)
if(getPlayerSex(cid) >= 2) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You cannot change your gender.")
return
end
if(getAccountPoints(cid) < config.costPremiumDays) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Sorry, not enough Premium Points - changing gender costs " .. config.costPremiumDays .. " Premium Points.")
doSendMagicEffect(getThingPosition(cid), CONST_ME_POFF)
return
end
if(getAccountPoints(cid) >= config.costPremiumDays) then
doRemovePoints(cid, -config.costPremiumDays)
end
local c = {
{3, 1, false, 6, 1},
{3, 2, false, 6, 2},
{6, 1, false, 3, 1},
{6, 2, false, 3, 2}
}
for i = 1, #c do
if canPlayerWearOutfitId(cid, c[i][1], c[i][2]) then
doPlayerRemoveOutfitId(cid, c[i][1], c[i][2])
c[i][3] = true
end
end
doPlayerSetSex(cid, getPlayerSex(cid) == PLAYERSEX_FEMALE and PLAYERSEX_MALE or PLAYERSEX_FEMALE)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have changed your gender and lost " .. config.costPremiumDays .. " days of premium time.")
doSendMagicEffect(getThingPosition(cid), CONST_ME_MAGIC_RED)
for i = 1, #c do
if c[i][3] == true then
doPlayerAddOutfitId(cid, c[i][4], c[i][5])
end
end
return true
end
Aqui está um npc ( aconselho usar ele para vender seus itens vips )
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 bootsid = 1455
local bootscost = 15
local ringid = 2145
local ringcost = 5
local bladeid = 12610
local bladecost = 20
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if(msgcontains(msg, 'vip boots') or msgcontains(msg, 'boots')) then
selfSay('Do you want to buy Vip Boots fo '.. bootscost ..' premium points?', cid)
talkState[talkUser] = 1
elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
if(getAccountPoints(cid) >= bootscost) then
if(doAccountRemovePoints(cid, bootscost) == TRUE) then
doPlayerAddItem(cid, bootsid)
selfSay('Here you are.', cid)
else
selfSay('Sorry, you don't have enough gold.', cid)
end
else
selfSay('Sorry, you don't have the item.', cid)
end
talkState[talkUser] = 0
elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser]) == TRUE) then
talkState[talkUser] = 0
selfSay('Ok then.', cid)
elseif(msgcontains(msg, 'blade of corruption') or msgcontains(msg, 'blade')) then
selfSay('Do you want to buy blade of corruption for '.. bladecost ..' premium points?', cid)
talkState[talkUser] = 2
elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 2) then
if(getAccountPoints(cid) >= bladecost) then
if(doAccountRemovePoints(cid, bladecost) == TRUE) then
doPlayerAddItem(cid, bladeid)
selfSay('Here you are.', cid)
else
selfSay('Sorry, you don't have enough points!.', cid)
end
end
talkState[talkUser] = 0
elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser]) == TRUE) then
talkState[talkUser] = 0
selfSay('Ok then.', cid)
elseif(msgcontains(msg, 'expring') or msgcontains(msg, 'ring')) then
selfSay('Do you want to buy exp ring for '.. ringcost ..' premium points?', cid)
talkState[talkUser] = 2
elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 2) then
if(getAccountPoints(cid) >= ringcost) then
if(doAccountRemovePoints(cid, ringcost) == TRUE) then
doPlayerAddItem(cid, ringid)
selfSay('Here you are.', cid)
else
selfSay('Sorry, you don't have enough gold.', cid)
end
end
talkState[talkUser] = 0
elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser]) == TRUE) then
talkState[talkUser] = 0
selfSay('Ok then.', cid)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
npc.xml
hello
farewell
é só isso!
créditos:
LucasOlzon
Beeki
achei muito útil, pois eu estava tendo sérios problemas com o Shop
System do Modern AAC, ai vai os sistemas.
antes de tudo execute esse comando em seu banco de dados.
ALTER TABLE `accounts` ADD `premium_points` INT NOT NULL DEFAULT 0;
#Sistemas
vá em data/libs e crie um novo arquivo com o nome 048-ppoints.lua
function getAccountPoints(cid)
local res = db.getResult('select `premium_points` from accounts where name = ''..getPlayerAccount(cid)..''')
if(res:getID() == -1) then
return false
end
local ret = res:getDataInt("premium_points")
res:free()
return tonumber(ret)
end
function doAccountAddPoints(cid, count)
return db.executeQuery("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) + count .."' WHERE `name` ='"..getPlayerAccount(cid).."'")
end
function doAccountRemovePoints(cid, count)
return db.executeQuery("UPDATE `accounts` SET `premium_points` = '".. getAccountPoints(cid) - count .."' WHERE `name` ='"..getPlayerAccount(cid).."'")
end
vá em data/talkactions/talkactions.xml e adicione as seguintes tags.
vá em data/talkactions/scripts e crie um novo arquivo com o seguinte nome AddPoints.lua
function onSay(cid, words, param, channel)
local split = param:explode(",")
local name, count = split[1], tonumber(split[2])
pid = getPlayerByNameWildcard(name)
if (not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. param .. " is not currently online.")
return TRUE
end
if not(split[2]) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The commands requires 2 parameters: character name, amount")
end
if not(count) then
print(count)
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Numeric parameter required.")
end
doAccountAddPoints(cid, count)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "" .. count .. " premium points were added to " .. getCreatureName(pid) .. "'s Account.")
return true
end
vá em data/talkactions/script e crie um arquivo com o seguinte nome GetPoints.lua
function onSay(cid, words, param, channel)
local pid = 0
if(param == '') then
pid = getCreatureTarget(cid)
if(pid == 0) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")
return TRUE
end
else
pid = getPlayerByNameWildcard(param)
end
if (not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. param .. " is not currently online.")
return TRUE
end
if isPlayer(pid) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "" .. getCreatureName(pid) .. "'s Account has " .. getAccountPoints(cid) .. " premium points.")
return TRUE
end
return TRUE
end
vá em data/talkactions/script e crie um arquivo com o seguinte nome RemovePoints.lua
function onSay(cid, words, param, channel)
local split = param:explode(",")
local name, count = split[1], tonumber(split[2])
local points = getAccountPoints(cid)
pid = getPlayerByNameWildcard(name)
if (not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. param .. " is not currently online.")
return TRUE
end
if not(split[2]) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The commands requires 2 parameters: character name, amount")
end
if not(count) then
print(count)
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Numeric parameter required.")
end
if (points <= 0) then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "" .. getCreatureName(pid) .. "'s Account has 0 premium points.")
end
doAccountRemovePoints(cid, count)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "" .. count .. " premium points were deleted from " .. getCreatureName(pid) .. "'s Account.")
return true
end
vá em data/creaturescripts/scripts e crie um novo arquivo com o nome SelfGetPoints.lua
function onLogin(cid)
if isPlayer(cid) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your Account has " .. getAccountPoints(cid) .. " premium points.")
end
return TRUE
end
declare ele no creaturescripts.xml
#Scripts
aqui está um exemplo de talkaction para mudar o sexo do personagem usando o sistema de points.
local config = {
costPremiumDays = 2
}
function onSay(cid, words, param, channel)
if(getPlayerSex(cid) >= 2) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You cannot change your gender.")
return
end
if(getAccountPoints(cid) < config.costPremiumDays) then
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Sorry, not enough Premium Points - changing gender costs " .. config.costPremiumDays .. " Premium Points.")
doSendMagicEffect(getThingPosition(cid), CONST_ME_POFF)
return
end
if(getAccountPoints(cid) >= config.costPremiumDays) then
doRemovePoints(cid, -config.costPremiumDays)
end
local c = {
{3, 1, false, 6, 1},
{3, 2, false, 6, 2},
{6, 1, false, 3, 1},
{6, 2, false, 3, 2}
}
for i = 1, #c do
if canPlayerWearOutfitId(cid, c[i][1], c[i][2]) then
doPlayerRemoveOutfitId(cid, c[i][1], c[i][2])
c[i][3] = true
end
end
doPlayerSetSex(cid, getPlayerSex(cid) == PLAYERSEX_FEMALE and PLAYERSEX_MALE or PLAYERSEX_FEMALE)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have changed your gender and lost " .. config.costPremiumDays .. " days of premium time.")
doSendMagicEffect(getThingPosition(cid), CONST_ME_MAGIC_RED)
for i = 1, #c do
if c[i][3] == true then
doPlayerAddOutfitId(cid, c[i][4], c[i][5])
end
end
return true
end
Aqui está um npc ( aconselho usar ele para vender seus itens vips )
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 bootsid = 1455
local bootscost = 15
local ringid = 2145
local ringcost = 5
local bladeid = 12610
local bladecost = 20
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if(msgcontains(msg, 'vip boots') or msgcontains(msg, 'boots')) then
selfSay('Do you want to buy Vip Boots fo '.. bootscost ..' premium points?', cid)
talkState[talkUser] = 1
elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
if(getAccountPoints(cid) >= bootscost) then
if(doAccountRemovePoints(cid, bootscost) == TRUE) then
doPlayerAddItem(cid, bootsid)
selfSay('Here you are.', cid)
else
selfSay('Sorry, you don't have enough gold.', cid)
end
else
selfSay('Sorry, you don't have the item.', cid)
end
talkState[talkUser] = 0
elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser]) == TRUE) then
talkState[talkUser] = 0
selfSay('Ok then.', cid)
elseif(msgcontains(msg, 'blade of corruption') or msgcontains(msg, 'blade')) then
selfSay('Do you want to buy blade of corruption for '.. bladecost ..' premium points?', cid)
talkState[talkUser] = 2
elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 2) then
if(getAccountPoints(cid) >= bladecost) then
if(doAccountRemovePoints(cid, bladecost) == TRUE) then
doPlayerAddItem(cid, bladeid)
selfSay('Here you are.', cid)
else
selfSay('Sorry, you don't have enough points!.', cid)
end
end
talkState[talkUser] = 0
elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser]) == TRUE) then
talkState[talkUser] = 0
selfSay('Ok then.', cid)
elseif(msgcontains(msg, 'expring') or msgcontains(msg, 'ring')) then
selfSay('Do you want to buy exp ring for '.. ringcost ..' premium points?', cid)
talkState[talkUser] = 2
elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 2) then
if(getAccountPoints(cid) >= ringcost) then
if(doAccountRemovePoints(cid, ringcost) == TRUE) then
doPlayerAddItem(cid, ringid)
selfSay('Here you are.', cid)
else
selfSay('Sorry, you don't have enough gold.', cid)
end
end
talkState[talkUser] = 0
elseif(msgcontains(msg, 'no') and isInArray({1}, talkState[talkUser]) == TRUE) then
talkState[talkUser] = 0
selfSay('Ok then.', cid)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
npc.xml
é só isso!
créditos:
LucasOlzon
Beeki