HomePortalFAQSearchMemberlistRegisterLog in

Share | 
 

 Ver. 0.1.0 - Gesior ITEM/PACC Shop (PHP+LUA) for TFS

Go down 
AuthorMessage
Clary
User
User


Number of posts : 36
Registration date : 2008-05-24

PostSubject: Ver. 0.1.0 - Gesior ITEM/PACC Shop (PHP+LUA) for TFS   Sat May 24, 2008 3:46 pm

Last update: 27 April 2008, 22:20
Newest version: 0.1.0
Shop in action(it's not my ots. Author: "coping images/animations of items is illegal"):
http://persoul.hopto.org/shop/index.php
Changes:
v 0.1.0 - fixed all known bugs, added transaction history and "sell container with items", 1 new layout "natural"
v 0.0.9 - fixed bug with "Too many connections"
v 0.0.3 - fixed bug with database and access to file (linux)
v 0.0.2 - fixed bug in lua script that let players create more than one item when they buy armor, legs, boots or helmet
v 0.0.1 - first posted version

I made shop script for TFS 0.2.10 - 0.2.11 and 0.3 (rev. 756, trunk), but maybe work with older TFS versions (not tested).
How to install:
1. Unpack "Gesior Shop System 0.1.0 PHP.zip" to your web directory (.../xampp/htdocs/gesiorshop/).
2. Open ".../gesiorshop/config/config.ini" and set valid directory with your server. Default config is:


Quote :
server_path = "C:/Documents and Settings/Gesior/Pulpit/tfs 0.2.9/"
give_to_other_users = "yes"
shop_layout_name = "dirt"
admin_account = "666"

server_path - your directory with TFS, remember about "/" at end!
shop_layout_name - name of directory with layout, in this version are two layouts ("dirt"[not dirt Razz ] and "natural")
admin_account - it's number of admin account, actually not in use
3. Open your OTS login.lua file from ".../your-ots-directory/data/creaturescripts/scripts/login.lua"
and put:


Quote :
-- ### CONFIG ###
-- message send to player by script "type" (types you can check in "global.lua")
SHOP_MSG_TYPE = 17
-- time (in seconds) between connections to SQL database by shop script
SQL_interval = 30
-- ### END OF CONFIG ###
SQL_COMUNICATION_INTERVAL = SQL_interval * 1000
function onLogin(cid)
if(InitShopComunication == 0) then
local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, {})
InitShopComunication = eventServ
end
registerCreatureEvent(cid, "PlayerDeath")
return TRUE
end

function sql_communication(parameters)
dofile("./config.lua")
env = assert(luasql.mysql())
con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
result_plr = assert(con:execute("SELECT * FROM z_ots_comunication WHERE `type` = 'login';"))
todo = result_plr:fetch({}, "a")
while todo do
id = tonumber(todo.id)
action = tostring(todo.action)
delete = tonumber(todo.delete_it)
cid = getPlayerByName(tostring(todo.name))
if isPlayer(cid) == TRUE then
if action == 'show_msg' then
local msg_text = tostring(todo.param1)
local msg_type = todo.param2
doPlayerSendTextMessage(cid, msg_type, msgtext)
if delete == 1 then
delete = assert(con:execute("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";"))
end
elseif action == 'give_item' then
local itemtogive_id = tonumber(todo.param1)
local itemtogive_count = tonumber(todo.param2)
local container_id = tonumber(todo.param3)
local container_count = tonumber(todo.param4)
local add_item_type = tostring(todo.param5)
local add_item_name = tostring(todo.param6)
local b_head_slot = getPlayerSlotItem(cid, 1)
local b_necklace_slot = getPlayerSlotItem(cid, 2)
local b_backpack_slot = getPlayerSlotItem(cid, 3)
local b_armor_slot = getPlayerSlotItem(cid, 4)
local b_right_hand = getPlayerSlotItem(cid, 5)
local b_left_hand = getPlayerSlotItem(cid, 6)
local b_legs_slot = getPlayerSlotItem(cid, 7)
local b_feet_slot = getPlayerSlotItem(cid, Cool
local b_ring_slot = getPlayerSlotItem(cid, 9)
local b_arrow_slot = getPlayerSlotItem(cid, 10)
if b_arrow_slot.itemid == 0 or (b_left_hand.itemid == 0 and b_right_hand.itemid == 0) then
local full_weight = 0
if add_item_type == 'container' then
container_weight = getItemWeight(container_id, 1)
items_weight = container_count * getItemWeight(itemtogive_id, itemtogive_count)
full_weight = items_weight + container_weight
else
full_weight = getItemWeight(itemtogive_id, itemtogive_count)
end
local free_cap = getPlayerFreeCap(cid)
if full_weight <= free_cap then
if add_item_type == 'container' then
local new_container = doCreateItemEx(container_id)
local iter = 0
while iter ~= container_count do
doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
iter = iter + 1
end
doPlayerAddItemEx(cid, new_container)
itemtogive_id = container_id
else
local addeditem = doPlayerAddItem(cid, itemtogive_id, itemtogive_count)
end
local head_slot = getPlayerSlotItem(cid, 1)
local necklace_slot = getPlayerSlotItem(cid, 2)
local backpack_slot = getPlayerSlotItem(cid, 3)
local armor_slot = getPlayerSlotItem(cid, 4)
local right_hand = getPlayerSlotItem(cid, 5)
local left_hand = getPlayerSlotItem(cid, 6)
local legs_slot = getPlayerSlotItem(cid, 7)
local feet_slot = getPlayerSlotItem(cid, Cool
local ring_slot = getPlayerSlotItem(cid, 9)
local arrow_slot = getPlayerSlotItem(cid, 10)
if ring_slot.itemid == itemtogive_id or feet_slot.itemid == itemtogive_id or legs_slot.itemid == itemtogive_id or armor_slot.itemid == itemtogive_id or necklace_slot.itemid == itemtogive_id or head_slot.itemid == itemtogive_id or arrow_slot.itemid == itemtogive_id or left_hand.itemid == itemtogive_id or right_hand.itemid == itemtogive_id or backpack_slot.itemid == itemtogive_id then
if b_ring_slot.uid ~= ring_slot.uid or b_feet_slot.uid ~= feet_slot.uid or b_legs_slot.uid ~= legs_slot.uid or b_armor_slot.uid ~= armor_slot.uid or b_necklace_slot.uid ~= necklace_slot.uid or b_head_slot.uid ~= head_slot.uid or b_backpack_slot.uid ~= backpack_slot.uid or b_right_hand.uid ~= right_hand.uid or b_left_hand.uid ~= left_hand.uid or b_arrow_slot.uid ~= arrow_slot.uid then
doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS shop. You should re-login now to become sure your new item will not disappear if any error occur.')
delete = assert(con:execute("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";"))
assert(con:execute("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";"))
else
doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop not added. Unknown error occured. Wait about '.. SQL_interval ..' seconds. If error will occur again contact with admin. Error item ID is: '.. id ..'')
end
else
doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop not added. Unknown error occured. Wait about '.. SQL_interval ..' seconds. If error will occur again contact with admin. Error item ID is: '.. id ..'')
end
else
doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot or give to friend and wait about '.. SQL_interval ..' seconds to get it.')
end


else
doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. Please take items from both hands or item from arrow slot and wait about '.. SQL_interval ..' seconds to get it.')
end
end
end
todo = result_plr:fetch (todo, "a")
end
con:close()
env:close()
local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, parameters)
end

3.1 CONFIGURE
At start of file posted above is part of shop config:

Quote :
-- message send to player by script "type" (types you can check in "global.lua")
SHOP_MSG_TYPE = 17
-- time (in seconds) between connections to SQL database by shop script
SQL_interval = 30

Default script connect to database 1 time every 30 seconds.
(script connect[1 connnection]->give items/show error if no cap/free
slot for new item - to all players online[1
connnection]->disconnect[0 connnection]->wait SQL_interval
time{30 sec?}[0 connnection]->script connect[1 connnection]...)
3.2 Open your OTS global.lua file from ".../your-ots-directory/data/global.lua"
and add this line somewhere:

Quote :
InitShopComunication = 0

4. In your MySQL database execute (with phpmyadmin or something like that):
IT'S SAME LIKE IN VERSION 0.0.3

Quote :
CREATE TABLE `z_ots_comunication` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`type` varchar(255) NOT NULL,
`action` varchar(255) NOT NULL,
`param1` varchar(255) NOT NULL,
`param2` varchar(255) NOT NULL,
`param3` varchar(255) NOT NULL,
`param4` varchar(255) NOT NULL,
`param5` varchar(255) NOT NULL,
`param6` varchar(255) NOT NULL,
`param7` varchar(255) NOT NULL,
`delete_it` int(2) NOT NULL default '1',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

and:
IT'S SAME LIKE IN VERSION 0.0.3

Quote :
CREATE TABLE `z_shop_offer` (
`id` int(11) NOT NULL auto_increment,
`points` int(11) NOT NULL default '0',
`itemid1` int(11) NOT NULL default '0',
`count1` int(11) NOT NULL default '0',
`itemid2` int(11) NOT NULL default '0',
`count2` int(11) NOT NULL default '0',
`offer_type` varchar(255) default NULL,
`offer_description` text NOT NULL,
`offer_name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

and(NEW):

Quote :
CREATE TABLE `z_shop_history_item` (
`id` int(11) NOT NULL auto_increment,
`to_name` varchar(255) NOT NULL default '0',
`to_account` int(11) NOT NULL default '0',
`from_nick` varchar(255) NOT NULL,
`from_account` int(11) NOT NULL default '0',
`price` int(11) NOT NULL default '0',
`offer_id` int(11) NOT NULL default '0',
`trans_state` varchar(255) NOT NULL,
`trans_start` int(11) NOT NULL default '0',
`trans_real` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

and(NEW):

Quote :
CREATE TABLE `z_shop_history_pacc` (
`id` int(11) NOT NULL auto_increment,
`to_name` varchar(255) NOT NULL default '0',
`to_account` int(11) NOT NULL default '0',
`from_nick` varchar(255) NOT NULL,
`from_account` int(11) NOT NULL default '0',
`price` int(11) NOT NULL default '0',
`pacc_days` int(11) NOT NULL default '0',
`trans_state` varchar(255) NOT NULL,
`trans_start` int(11) NOT NULL default '0',
`trans_real` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

5. End of installation. Open page index.php from PHP script directory in your internet explorer. ( http://127.0.0.1/gesiorshop/ )
-------------------------------------------
REPORT BUGS IN THIS THREAD:
http://otland.net/showthread.php?t=5772

ShopSystem file:
http://otland.net/attachment.php?attachmentid=576&d=1209330051
Back to top Go down
View user profile
Clary
User
User


Number of posts : 36
Registration date : 2008-05-24

PostSubject: Re: Ver. 0.1.0 - Gesior ITEM/PACC Shop (PHP+LUA) for TFS   Sat May 24, 2008 3:50 pm

-------------------------------------
About script:
-work with MySQL servers (tested on TFS 0.2.10/0.2.11, XAMPP 1.6.5 [Apache2 - PHP5!])
-items can't disappear like in other "item shop" scripts
-doesn't use too much CPU (run 1 time every XX seconds)

What my script do:
-give item/pacc in game when player buy it on site
-you can add many items with diffrent prices (like: Golden Armor - 5
points, 10 Days of PACC - 25 points, 5 days of pacc - 15 points)
-load list of offers from database
My script don't:
-give items/pacc for SMS/RL cash transfer (only for "points"!)

Screens:
-main page:

-when user selected item from list:

-when selected player and item:

-when transaction confirmed:

-NEW layout ("natural") and transaction history page

-there are also pages to login/logout (no screens)

Sample of offer configuration. Execute it in MySQL OTS database:

Code:

INSERT INTO `z_shop_offer`(`id`,`points`,`itemid1` ,`count1` ,`itemid2`
,`count2` ,`offer_type` ,`offer_description` ,`offer_name`)
VALUES
(NULL , '10', '0', '12', '0', '0', 'pacc', 'Buy 12 days of premium
account for yourself or your friend!', '12 Days of PACC'
), (NULL , '40', '5890', '50', '0', '0', 'item', 'Buy 50 Chicken Feathers!', '50x Chicken Feather'
),
(NULL , '100', '2466', '1', '1987', '8', 'container', 'Buy bag with 8
Golden Armor! Become a rich mother fucker!', '8x Golden Armor');

When you add new PACC offer you must set in offer table in database:
id - empty (auto_incement)
points - how many points cost this offer
count1 - number of PACC days this offer give
offer_type = "pacc"
offer_description - description of new pacc offer like: "Buy 5
days of PACC. With PACC you can visit new areas, fight stronger
monsters and promote your character!"
offer_name - name of new pacc offer like: "5 Days of PACC"

When you add new ITEM offer you must set in offer table in database:
id - empty (auto_increment)
points - how many points cost this offer
itemid1 - ID of created item on OTS
count1 - "count" of item on OTS, like SD with 15 shots has count
"15", normal item (bag, crossbow, golden armor...) has count "1", count
3 will not create 3 golden armors, use 'container' to give more items
offer_type = "item"
offer_description - description of new item offer like: "Buy Golden Armor and become great knight! Fight stonger mosters and lose less HP!"
offer_name - name of new pacc offer like: "1x Golden Armor"

When you add new CONTAINER offer you must set in offer table in database:
id - empty (auto_increment)
points - how many points cost this offer
itemid1 - ID of created items in container
count1 - "count"/"type" of items in container, like SD with 15
shots has count "15", normal item (bag, crossbow, golden armor...) has
count "1", count 3 will not create 3 golden armors, use "count2" to
give more items
itemid2 - ID of created container (like bag: 1987, ITEM MUST BE CONTAINER AND MUST BE WEARABLE!)
count2 - number of items in container, if you use "bag" (id
1987) as a container you can put 1-8 items, if backpack 1-20, dont set
more than max. number of items in container!
offer_type = "container"
offer_description - description of container offer like: "Buy 8
Golden Armors in bag and become rich player! Fight stonger mosters and
lose less HP or sell it for much cash!"
offer_name - name of new pacc offer like: "8x Golden Armor"

I hope you understand how it work Razz
TODO:
-transfer "premium points" to other account
-panel for admins to add/delete items
Back to top Go down
View user profile
 
Ver. 0.1.0 - Gesior ITEM/PACC Shop (PHP+LUA) for TFS
Back to top 
Page 1 of 1
 Similar topics
-
» Coding Shop!
» The Tarkit Shop/House
» TechnoSam's Avatar/Signature Shop
» Organization Repair Shop
» The toy store/Bakery/Ice cream shop/candy shop

Permissions in this forum:You cannot reply to topics in this forum
Mappers Hell :: Downloads :: Utility Downloads-
Jump to: