Autor głównego system to: Mock link licencja: ~brak opisu~
Autorem dodatkowego mebla i drzwi: Moqill Licencja: Rób co chcesz byle by nie zmieniać autora

Testowane na: tfs 0.4_

Najpierw uaktualniamy baze danych o linijke

ALTER TABLE `accounts` ADD `vip_time` INT( 15 ) NOT NULL

Dodajem w data/lib/ plik o naziw vip_system.lua. Wklejamy w niego

vip_system.lua
vip = {
   name = "Vip system";
   author = "Mock";
   version = "1.0.0.0";
   query="ALTER TABLE `accounts` ADD `vip_time` INT( 15 ) NOT NULL"
}
function vip.setTable()
   db.executeQuery(vip.query)
end
function vip.getVip(cid)
         assert(tonumber(cid),'Parameter must be a number')
         if isPlayer(cid) == FALSE then error('Player don\'t find') end;
         ae =  db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = "..getPlayerAccount(cid)..";")
         if ae:getID() == -1 then
            return 0
         end
         return ae:getDataInt("vip_time") or 0
end
 
function vip.getVipByAcc(acc)
         assert(acc,'Account is nil')
         local a = db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = "..acc..";")
         if a:getID() ~= -1 then
             return a:getDataInt("vip_time") or 0
         else
             error('Account don\'t find.')
         end
end
 
function vip.setVip(cid,time)
         dofile("config.lua")
         assert(tonumber(cid),'Parameter must be a number')
         assert(tonumber(time),'Parameter must be a number')
         if isPlayer(cid) == FALSE then error('Player don\'t find') end;
         db.executeQuery("UPDATE `"..sqlDatabase.."`.`accounts` SET `vip_time` = '"..(os.time()+time).."' WHERE `accounts`.`name` =".. getPlayerAccount(cid).." LIMIT 1 ;")
end
 
function vip.getVipByAccount(acc)
         assert(acc,'Account is nil')
         return db.getResult("SELECT `vip_time` FROM `accounts` WHERE `name` = "..acc..";"):getDataInt("vip_time") or 0
end                                      
 
function vip.hasVip(cid)
         assert(tonumber(cid),'Parameter must be a number')
         if isPlayer(cid) == FALSE then error('Player don\'t find') end;
         local t = vip.getVip(cid) or 0
         if os.time(day) < t then
            return TRUE
         else
            return FALSE
         end
end
 
function vip.accountHasVip(acc)
         assert(acc,'Account is nil')
         if os.time() < vip.getVipByAccount(acc) then
            return TRUE
         else
            return FALSE
         end
end
function vip.getDays(days)
   return (3600 * 24 * days)
end
function vip.addVipByAccount(acc,time)
   assert(acc,'Account is nil')
   assert(tonumber(time),'Parameter must be a number')
   local a = vip.getVipByAcc(acc)
   a = os.difftime(a,os.time())
   if a < 0 then a = 0 end;
   a = a+time
   return vip.setVipByAccount(acc,a)
end
function vip.setVipByAccount(acc,time)
         dofile("config.lua")
         assert(acc,'Account is nil')
         assert(tonumber(time),'Parameter must be a number')
         db.executeQuery("UPDATE `"..sqlDatabase.."`.`accounts` SET `vip_time` = '"..(os.time()+time).."' WHERE `accounts`.`name` ="..acc.." LIMIT 1 ;")
         return TRUE
end
function vip.returnVipString(cid)
   assert(tonumber(cid),'Parameter must be a number')
   if isPlayer(cid) == TRUE then
      return os.date("%d %B %Y %X ", vip.getVip(cid))
   end
end

Dodajemy do talkactions.xml linijke najlepiej gdzies pod <!– God –>

<talkaction log="yes" words="/vip" access="5" event="script" value="vip.lua"/>

Dodajemy do data/talkaction/script/ pliczek o nazwie vip.lua z treścią:

vip.lua
  function onSay(cid, words, param)
         if param == "" then
            return  doPlayerPopupFYI(cid,"Are you confused?\n Lear the commands!\n---------------\nADD vip:\n/vip add days player\n/vip add 30 mock\n---------------\nDel vip:\n/vip del player\n/vip del mock\n---------------\ncheck vip:\n/vip see player\n/vip see mock\n---------------\n")
         end
         if param:lower():find('add') == 1 and 3 then
            local ret = string.explode(param,' ',3)
            if #ret < 3 or tonumber(ret[2]) == nil or getPlayerByName(ret[3]) == false then
               return doPlayerSendTextMessage(cid,25,"Add vip:\n/vip add days player\n/vip add 30 mock\n")
            end
            vip.addVipByAccount( getPlayerAccount(getPlayerByName(ret[3])) ,vip.getDays(ret[2]))
            doPlayerSendTextMessage(cid,25,"Has benn added "..tonumber(ret[2]).." days to "..ret[3]..".")
            doPlayerSendTextMessage(getPlayerByName(ret[3]),25,"You recivied "..tonumber(ret[2]).." vip days!")
         elseif param:lower():find('del') == 1 and 3 then
            local ret = string.explode(param,' ',2)
            if #ret < 2 or getPlayerByName(ret[2]) == false then
               return doPlayerSendTextMessage(cid,25,"Del vip:\n/vip del player\n/vip del mock\n")
            end
            vip.setVipByAccount(getPlayerAccount(getPlayerByName(ret[2])),-os.time())
            doPlayerSendTextMessage(cid,25,ret[2].."'s vip has been deleted.")                                                                                                                                              
         elseif param:lower():find('see') == 1 and 3 then
            local ret = string.explode(param,' ',2)
            if #ret < 2 or getPlayerByName(ret[2]) == false then
               return doPlayerSendTextMessage(cid,25,"check vip:\n/vip see player\n/vip see mock\n")
            end
            local ret_ = vip.getVip(getPlayerByName(ret[2]))
            if ret_ == 0 then
              return doPlayerSendTextMessage(cid, 25,ret[2].." Dont have any vip")
            else
              return doPlayerSendTextMessage(cid, 25, "Vip from "..ret[2].." end in "..os.date("%d %B %Y %X ",ret_))
            end
         end
         return TRUE
end 

Do actions.xml dodajemy:

<action itemid="5785" event="script" value="other/vip.lua"/> 
<action unqideid="5780" event="script" value="other/vip door.lua"/>

Tworzymy pliczek o nazwie vip.lua w data/actions/script/other z zawartością:

vip.lua
function onUse(cid, item, fromPosition, itemEx, toPosition)
local days = 30
 
                doCreatureSay(cid, "CONGRATULATIONS! You are now a VIP for "..days.." days! You can now enter the VIP-area and use unique features!. ", TALKTYPE_ORANGE_1)
           	vip.addVipByAccount(getPlayerAccount(cid), vip.getDays(days))
                doRemoveItem(item.uid, 1)
                doSendAnimatedText(getCreaturePosition(cid), "+"..days.." days", 30)   
        return TRUE
end 

Tworzymy pliczek o nazwie vip_door.lua w data/actions/script/other/ z zawartością:

vip_door.lua
function onUse(cid, item, fromPosition, itemEx, toPosition)
    if vip.getVip(cid) > 0 then
            if getCreaturePosition(cid).y < toPosition.y then
                   doTeleportThing(cid, {x=toPosition.x,y=toPosition.y+1,z=toPosition.z}, TRUE)
            else
                     doTeleportThing(cid, {x=toPosition.x,y=toPosition.y-1,z=toPosition.z}, TRUE)
            end
         doCreatureSay(cid, "Thank you for purchasing a VIP!", TALKTYPE_ORANGE_1)
           doSendMagicEffect(getCreaturePosition(cid), 10)
      else
           doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Sorry, only VIP Players can pass here!.")
      end
   return TRUE
end 

Gotowe :)

otspub/vip_system_by_mock_vip_medal_door_by_moqill_lua.txt · Last modified: 2010/04/27 18:29 by moqill
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki