NA

Shop.lua Adicionando Nome Nos Items Comprados.

Por Natanael Beckman, 20 de jan. de 2011 em Globalevents e Spells

otserv
tibia
script
26
9.9k
Natanael BeckmanN
20 de janeiro de 2011 às 01:37

Galera eu vi um tópico aqui no XTibia de um cara tentando concluir o Shop.lua dele pra quando o player comprasse um item no shop ja vinhesse nesse item o nome do player...

Eu particulamente tenho um servidor e sofro com items cloner =C. Isso ta send bom porque agora estou sabendo de onde esta vindo os cloner do meus items VIP. E assim descubro ligeiramente a raiz de tudo.

Bom deixando de bla bla bla, aqui vai o script.

 

 

data/globalevents/globalevents.xml

 

        <globalevent name="shop" interval="30" event="script" value="shop.lua"/>

 

Shop.lua:

local SHOP_MSG_TYPE = MESSAGE_EVENT_ORANGE
local SQL_interval = 30

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
		local id = tonumber(result_plr:getDataInt("id"))
		local action = tostring(result_plr:getDataString("action"))
		local delete = tonumber(result_plr:getDataInt("delete_it"))
		local cid = getCreatureByName(tostring(result_plr:getDataString("name")))
		if isPlayer(cid) 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)
					doItemSetAttribute(new_item, "description", "This item can only be used by the player ".. getPlayerName(cid) .."!")
					doItemSetAttribute(new_item, "aid", getPlayerGUID(cid)+10000)
					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

 

Creditos pra min por ir em busca da solução e ao Cykotitan por me trazer a solução.

Editado Março 5 por GM Bekman

ka9K
20 de janeiro de 2011 às 12:52

Muito bom, mais seria show, se coloca-se para deleta o item. Tipo o player compra o item lá no shop se ele passar para outro player o item seria auto-deletado.

Natanael BeckmanN
20 de janeiro de 2011 às 21:08

hmmm, é bem mais facíl bota pra só o player poder usar o item ;D

ka9K
21 de janeiro de 2011 às 00:42

Tbm, mais tipo, se esse player tiver o item vip e morrer RED, ae chega o outro player e pega e fica sem uzar... era mais facil deleta o item...

Natanael BeckmanN
21 de janeiro de 2011 às 18:56

=s Verdade... agora ae é com os grandes scripter.

kkkkk

1 mês depois...
tdp157T
01 de fevereiro de 2011 às 13:35

1 pequena pergunta !

 

ah alguma action que eu possa usar para restringir que o item comprado pelo shop so possa ser usado pelo player que compro?

Natanael BeckmanN
03 de fevereiro de 2011 às 02:45

Não, mais existem outras formas mais complicadas que é necessario você saber um pouco de progamação.

03 de fevereiro de 2011 às 18:03

cara quando vc for fazer uma postagem vc deveria colocar a versão do ot, em qual serv testou, e explicar onde colocar e etc...

LilitaL
05 de fevereiro de 2011 às 10:17

apenas o que as pessoas podem usar para colocar o seu nome ou outro bem...

3 semanas depois...
CoLoRaDoC
26 de fevereiro de 2011 às 05:27

bom vo aproveitar que nao passou 1 mês ainda! hehe

eu queria saber esse shop.lua onde fica???

 

aki soh tem shopsystem.php e shopadmin.php!!! como eu faço o q tem q fazer?

Natanael BeckmanN
26 de fevereiro de 2011 às 14:02

data/globalevents/scripts

 

	<globalevent name="shop" interval="30" event="script" value="shop.lua"/>

Editado Fevereiro 26 por GM Bekman

CoLoRaDoC
26 de fevereiro de 2011 às 14:32

agora sim!! sera que é melhor editar seu post la em cima???

 

bekman me manda o seu msn por pm!

 

 

to com problemas na vip do site e do ot e preciso de ajuda!

Editado Fevereiro 26 por ADM_Forever

4 meses depois...
vctolivo95V
23 de junho de 2011 às 21:41

Aqui funfo direitinho valew !

RajasR
24 de junho de 2011 às 12:10

cara isso eh soh fazer em moviments, pq ele cria uma descrição do item...

Editado Junho 26 por falaaa

1 mês depois...
guixapG
04 de julho de 2011 às 09:30

Teria como fazer isso para items comprado por talkaction?



Porque meu Shop System é por talk :X