• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

[Sms Shop by Gesior] Daje pacc, itemów nie.

BugaS

Donżuan
Joined
Mar 12, 2009
Messages
1,219
Reaction score
9
Location
NYC
Witam wszystkich!


Mam taki problem, używam sms shop by gesior.

Wszystko fajnie... tylko że daje mi pacc a nie daje itemów :(

Używam otsa eldin world 8.4 SQL.

Prosze o szybka pomoc!!!
 
a są wpisy w login.lua i w innych plikach??

Last update: 22 October 2008, 12:43
Newest version: 0.1.4
Changes:
v 0.1.4 - fixed bug with 'weight' when player buy rune (0.2 and 0.3)
v 0.1.3 - new version of LUA script for TFS 0.3 alpha, now it's not possible to clone any item (soft boots in old version) and no more bugs with 'getItemWeight'
v 0.1.2 - new version of LUA script for TFS 0.2, now it's not possible to clone any item (soft boots in old version)
v 0.1.1 - added LUA script for newest revisions of TFS 0.3
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.9 - 0.2.18 and 0.3, but maybe work with older TFS versions (not tested).
How to install:
1. Install my newest acc. maker.
2. Open ".../xampp/htdocs/config/config.ini" and activate shop system (change "0" to "1"):
Code:
shop_system = "1"
3. Open your OTS login.lua file from ".../your-ots-directory/data/creaturescripts/scripts/login.lua"
, delete all and put:
IF YOU USE TFS 0.2.9, 0.2.10, 0.2.11, 0.2.12, 0.2.13, 0.2.14, 0.2.15, 0.2.16, 0.2.17, 0.2.18, 0.2.19 OR TFS 0.3 REV. under 815:
Code:
-- ### CONFIG ###
-- message send to player by script "type" (types you can check in "global.lua")
SHOP_MSG_TYPE = 19
-- 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
			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 received_item = 0
			local full_weight = 0
			if add_item_type == 'container' then
				container_weight = getItemWeight(container_id, 1)
				if isItemRune(itemtogive_id) == TRUE then
					items_weight = container_count * getItemWeight(itemtogive_id, 1)
				else
					items_weight = container_count * getItemWeight(itemtogive_id, itemtogive_count)
				end
				full_weight = items_weight + container_weight
			else
				full_weight = getItemWeight(itemtogive_id, itemtogive_count)
				if isItemRune(itemtogive_id) == TRUE then
					full_weight = getItemWeight(itemtogive_id, 1)
				else
					full_weight = getItemWeight(itemtogive_id, itemtogive_count)
				end
			end
			local free_cap = getPlayerFreeCap(cid)
			if full_weight <= free_cap then
				if add_item_type == 'container' then
					local new_container = doCreateItemEx(container_id, 1)
					local iter = 0
					while iter ~= container_count do
						doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
						iter = iter + 1
					end
					received_item = doPlayerAddItemEx(cid, new_container)
				else
					local new_item = doCreateItemEx(itemtogive_id, itemtogive_count)
					received_item = doPlayerAddItemEx(cid, new_item)
				end
				if received_item == RETURNVALUE_NOERROR then
					doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS shop.')
					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 is waiting for you. Please make place for this item in your backpack/hands 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. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.')
			end
		end
		todo = result_plr:fetch (todo, "a")
	end
	con:close()
	env:close()
	local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, parameters)
end
OR IF YOU USE NEW VERSION OF TFS 0.3 (alpha1 or new):
beta 0.3 installation (test on alpha4) - not in login.lua / globals.lua!:
in data/globalevent/globalevents.xml add:
PHP:
	<globalevent name="shop" interval="30" script="shop.lua"/>
in data/globalevent/shop.lua paste:
PHP:
-- ### CONFIG ###
-- message send to player by script "type" (types you can check in "global.lua")
SHOP_MSG_TYPE = 19
-- time (in seconds) between connections to SQL database by shop script
SQL_interval = 30
-- ### END OF CONFIG ###
function onThink(interval, lastExecution)
	local result_plr = db.getResult("SELECT * FROM z_ots_comunication WHERE `type` = 'login';")
	if(result_plr:getID() ~= -1) then
		while(true) do
			id = tonumber(result_plr:getDataInt("id"))
            action = tostring(result_plr:getDataString("action"))
			delete = tonumber(result_plr:getDataInt("delete_it"))
			cid = getCreatureByName(tostring(result_plr:getDataString("name")))
			if isPlayer(cid) == TRUE then
				local itemtogive_id = tonumber(result_plr:getDataInt("param1"))
				local itemtogive_count = tonumber(result_plr:getDataInt("param2"))
				local container_id = tonumber(result_plr:getDataInt("param3"))
				local container_count = tonumber(result_plr:getDataInt("param4"))
				local add_item_type = tostring(result_plr:getDataString("param5"))
				local add_item_name = tostring(result_plr:getDataString("param6"))
	            local received_item = 0
	            local full_weight = 0
	            if add_item_type == 'container' then
	                container_weight = getItemWeightById(container_id, 1)
					if isItemRune(itemtogive_id) == TRUE then
						items_weight = container_count * getItemWeightById(itemtogive_id, 1)
					else
						items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count)
					end
	                full_weight = items_weight + container_weight
	            else
	                full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
					if isItemRune(itemtogive_id) == TRUE then
						full_weight = getItemWeightById(itemtogive_id, 1)
					else
						full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
					end
	            end
	            local free_cap = getPlayerFreeCap(cid)
	            if full_weight <= free_cap then
	                if add_item_type == 'container' then
	                    local new_container = doCreateItemEx(container_id, 1)
	                    local iter = 0
	                    while iter ~= container_count do
	                        doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
	                        iter = iter + 1
	                    end
	                    received_item = doPlayerAddItemEx(cid, new_container)
	                else
	                    local new_item = doCreateItemEx(itemtogive_id, itemtogive_count)
	                    received_item = doPlayerAddItemEx(cid, new_item)
	                end
	                if received_item == RETURNVALUE_NOERROR then
	                    doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS shop.')
	                    db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
						db.executeQuery("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 is waiting for you. Please make place for this item in your backpack/hands 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. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.')
	            end
	        end
			if not(result_plr:next()) then
				break
			end
		end
		result_plr:free()
    end
	return TRUE
end
3.1 CONFIGURE
At start of file posted above is part of shop config:
Code:
-- 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.
3.2 Open your OTS global.lua file from ".../your-ots-directory/data/global.lua"
and add this line somewhere:
Code:
InitShopComunication = 0
4. In your MySQL database execute (in phpmyadmin):
(all needed mysql queries: http://wklej.org/id/37481/txt )
Code:
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:
Code:
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=1 ;
and:
Code:
ALTER TABLE `accounts` ADD `premium_points` INT( 11 ) NOT NULL DEFAULT '0';
and(NEW):
Code:
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):
Code:
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. Now add offers (examp below)
-------------------------------------
About script:
-work with MySQL servers (tested on TFS 0.2.10/0.2.11/0.2.17/0.3a3pl1, 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"!) [download script from other thread]

Screens:
-main page:

-when user selected item from list:

-when selected player and item:

-when transaction confirmed:

-transaction history page


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 :p

REPORT BUGS IN THIS THREAD.
 
Witam wszystkich!


Mam taki problem, używam sms shop by gesior.

Wszystko fajnie... tylko że daje mi pacc a nie daje itemów :(

Używam otsa eldin world 8.4 SQL.

Prosze o szybka pomoc!!!

on jest na tfs ^^ nie wiem czy jest support na twoj distro.
 
Up Up

Dodałem wszystkie pliki itp...

Tylko np nie moge dodac :
InitShopComunication = 0

Bo w tym tfsie nie ma tego pliku global.lua. Zrobilem ten shop.lua itp

I dalej nic :(


Btw sorry za double ;/
 
Już działa mi ten sklepik. Ale mam taki problem, że ten item dopiero ten ktoś dostaje po paru sekundach.

A i jeszcze coś... mimo że w ustawieniach shop-a mam ustawiony kod z obrazka to nie mam obrazka ;(
 
Nie musi być wylogowany aby dostać item ;)
Co do szybkości, tak masz ustawione ;)
SQL_interval = 30 <- tutaj ilość sekund - radze dać 5.
<globalevent name="shop" interval="30" script="shop.lua"/> <- tutaj też, interval jest bodajże podawany w sekundach ;) więc zmień to i to na 5 i działa
 
Czasem się załamuje. Masz dokładnie człowieku napisane jak co zrobić! Czasem trzeba coś poczytać a nie bezmyślnie kopiować!
 
1. nie mam 14 lat.
2. Może ty masz 15 i wyżywasz się na młodszych? Tata bije?
3. Już wszystko z shopem zrobiłem

Close topic!
 
Ej a ja mam wersje silnika TFS 0.2.0.0 i nie działa mi to co wyżej :( pisze w silniku to

[01/04/2009 19:18:34] Lua Script Error: [CreatureScript Interface]
[01/04/2009 19:18:34] in a timer event called from:
[01/04/2009 19:18:34] data/creaturescripts/scripts/login.lua:eek:nLogin
[01/04/2009 19:18:34] luaDoPlayerAddItemEx(). Item not found
 
Fajnie widziec ale co źle ???? Wszystko jak w poradnikach niech ktos pomoze lubm i pomoze
 
Ej ja mam pytanie pacca mi daje ale itemek nie daje nie wiem gdzie ustawic to globalvent pomożcie podam nawet gg: 2909501 prosze zaplace nawet 20 zł za pomoc!
 
Back
Top