
Nie tylko o Tibii i OTS...

Ze względu na to, iż wiele userów pyta czy można przerobić vip system, żeby był na całe konto, a nie tylko na jedną postać, postanowiłem nareszcie odpowiedzieć "tak!", otóż znalazłem na to sposób, przejdę może od razu do rzeczy...
Do bazy danych:
CREATE TABLE IF NOT EXISTS `accounts_storage` ( `id` int(11) NOT NULL DEFAULT '0', `key` int(10) NOT NULL DEFAULT '0', `value` varchar(255) NOT NULL DEFAULT '0', UNIQUE KEY `id_key` (`id`,`key`), KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
data/lib/050-function.lua\function.lua (na samym końcu)/b]
function setAcccountStorageValue(cid, key, value)
local result = db.getResult("SELECT `key` FROM `accounts_storage` WHERE (`id` = '" .. getPlayerAccountId(cid) .. "' and `key` = '" .. key .. "');")
if result:getDataInt("key") == nil then
return db.executeQuery("INSERT INTO `accounts_storage` (`id`, `key`, `value`) VALUES (" .. getPlayerAccountId(cid) .. ", " .. key .. ", " .. value .. ")")
else
return db.executeQuery("UPDATE `accounts_storage` SET `value` = " .. value .. " WHERE (`id` = '" .. getPlayerAccountId(cid) .. "' and `key` = '" .. key .. "');")
end
end
function getAccountStorageValue(cid, key)
local value = db.getResult("SELECT `value` FROM `accounts_storage` WHERE (`id` = '" .. getAccountAccountId(cid) .. "' and `key` = '" .. key .. "');")
return value:getDataInt("value")
end[b]actions.xml:
<!-- Vip System by Sassin -->
<action actionid="12694" event="script" value="vip/drzwi.lua" />
<action itemid="XXXX" event="script" value="vip/vip.lua"/> -- XXXX id itemu dajacego vip
--<action itemid="ZZZZ" event="script" value="vip/vip2.lua"/> -- ZZZZ id drugiego itemu dajacego vipdata/actions/scripts/vip/drzwi.lua:
-- Vip system by Sassin
local config = {
storage = 246282 -- nie ruszac
wejscie = "Witaj vip graczu!" -- tekst, ktory pojawi sie nad graczem po przesciu przez drzwi vip
brakvip = "Nie masz vip'a, nie mozesz przesc przez te drzwi." -- tekst, ktory wyswietli sie gracza, ktorzy probuja przesc, a nie maja vipa
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
local gracz = getCreaturePosition(cid) -- nie ruszac
if (item.actionid == 12694 and getAccountStorageValue(cid, config.storage) >= 1) then
if gracz.x < toPosition.x then
doTeleportThing(cid, {x=toPosition.x+1,y=toPosition.y,z=toPosition.z}, TRUE)
doCreatureSay(cid, ""..config.wejscie.."", TALKTYPE_ORANGE_1)
else
doTeleportThing(cid, {x=toPosition.x-1,y=toPosition.y,z=toPosition.z}, TRUE)
doCreatureSay(cid, ""..config.wejscie.."", TALKTYPE_ORANGE_1)
end
return TRUE
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, ""..config.brakvip.."")
return TRUE
end
return FALSE
enddata/actions/scripts/vip/vip.lua
-- Vip system by Sassin
local config = {
lvl = 10 -- lvl od jakiego mozna uzyc vip itemu
storage = 246282 -- nie ruszac
dni = 10 -- ile item zadekralorwany w actions.xml ze sciezka do tego pliku ma dawac dni vipa
braklvl = "Level wymagany to "..config.lvl..", wbij i sprobuj ponownie." -- co ma pisac gdy nie ma lvl
tekstgracz = "Gratulacje! Otrzymales vipa na "..config.dni.." dni! Mozesz isc do miast vip!." -- co ma pisac graczowi uzywajacemu vipa
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
local gracz = getPlayerPosition(cid) -- nie ruszac
if(getPlayerLevel(cid) >= config.lvl) then
getAccountStorageValue(cid, config.storage)
doCreatureSay(cid, ""..config.tekstgracz.."", TALKTYPE_ORANGE_1)
setAccountStorageValue(cid, config.storage, (getAccountStorageValue(cid, config.storage) + config.dni))
doRemoveItem(item.uid, 1)
else
doPlayerSendCancel(cid, ""..config.braklvl.."")
end
return TRUE
endglobalevents.xml:
<!-- Vip System by Sassin -->
<globalevent name="checkvip" interval="86400000" event="script" value="vip/dni.lua"/>
<globalevent name="removevip" interval="36000000" event="script" value="vip/vip.lua"/>data/globalevents/scripts/vip/dni.lua
-- Vip system by Sassin
local config = {
storage = 246282 -- nie ruszac
}
function onThink(cid, item, fromPosition, toPosition)
for _, name in ipairs(getOnlinePlayers()) do
local gracz = getPlayerByName(name)
if getAccountStorageValue(gracz, config.storage) > 1 then
setAccountStorageValue(gracz, config.storage, getAccountStorageValue(gracz) - 1)
end
end
enddata/globalevents/scripts/vip/vip.lua
-- Vip system by Sassin
local config = {
storage = 246282 -- nie ruszac
}
function onThink(cid, item, fromPosition, toPosition)
for _, name in ipairs(getOnlinePlayers()) do
local gracz = getPlayerByName(name)
if getAccountStorageValue(gracz, config.storage) == 1 then
setAccountStorageValue(gracz, config.storage, 0)
end
end
endPozdrawiam Sassin !
Offline
Dzieki dziala w 100%,szukalem czegos takiego. ^^
Offline

Dziękuję Ci bardzo za tak, miłego posta.
KamaShoot - Dam Ci plusika, za pierwszą osobę, która odpowiedziała w skrypcie.
Offline
Nie ma za co, bardzo sie przydal skrypt.
Cenie wysilek innych userow. I przyjemnoscia jest dla mnie ocenianie postow.
Dam ci reputa jak zejdzie limit ^^ Jesze 400 minut okolo.
Offline