Interface | Params |
---|---|
add_gid | [] |
create_item_to_package | [
"gid",
"num"
] |
init | [] |
test | [] |
write_conf | [
"gid",
"conf"
] |
Method | Caller | Call time | Transaction |
---|---|---|---|
write_conf |
2020-10-30 22:23:50
| ||
write_conf |
2020-10-30 22:23:20
| ||
write_conf |
2020-10-30 13:02:54
| ||
write_conf |
2020-10-30 13:02:26
| ||
write_conf |
2020-10-30 13:01:52
| ||
write_conf |
2020-10-25 12:38:10
| ||
write_conf |
2020-10-17 14:18:00
| ||
write_conf |
2020-10-17 14:17:32
| ||
init |
2020-10-17 14:16:52
|
---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by wang.
--- DateTime: 10/7/20 2:22 AM
---
CONTRACT_ITEMFACTORY = "contract.jh-itemfactory"
CONTRACT_CONFIGS = "contract.jh-configs"
CONTRACT_NAME = "contract.jh-itemfactory"
local function _ContractConfig()
if G_CONFIG == nil then
G_CONFIG = import_contract(CONTRACT_CONFIGS)
end
end
local function _init_items_config()
local data = chainhelper:get_contract_public_data(CONTRACT_ITEMFACTORY)
_items_config = data._items_config
now_gid = data.now_gid
end
local function _num_star(max_star)
local r_num = chainhelper:random() % 1000
local star = 0
if r_num > 997 then--0.2%
star = 6
elseif r_num > 969 then -- 2.8%
star = 5
elseif r_num > 919 then -- 5%
star = 4
elseif r_num > 809 then -- 11%
star = 3
elseif r_num > 579 then -- %23
star = 2
else -- % 58
star = 1
end
if star > max_star then
star = max_star
end
return star
end
local function _create_item(gid)
local g_conf = _items_config[gid]
local item = { gid = gid, cid = gid }
-- 四个基本属性
item.name = g_conf.name
--item.describe = g_conf.describe
--item.icon = g_conf.icon
item.isNft = g_conf.isNft
-- 计算GID
if g_conf.isRandom then
item.cid = item.gid .. "-" .. now_gid
now_gid = now_gid + 1
chainhelper:invoke_contract_function(CONTRACT_ITEMFACTORY, "add_gid", "[]")
item.star = _num_star(g_conf.max_star)
else
item.star = g_conf.star
item.base_info = g_conf.base_attrs
return item
end
if g_conf.base_attrs == nil then g_conf.base_attrs = {} end
if g_conf.ext_attrs == nil then
g_conf.ext_attrs = {}
end
item.base_attrs = {}
item.ext_attrs = {}
-- 必有属性
for key, value in pairs(g_conf.base_attrs) do
if value._float == nil then value._float = 0 end
local val = value.base + chainhelper:random() % (value._float + 1)
item.base_attrs[key] = val
end
if item.star > 0 then
local i_ext = #g_conf.ext_attrs
if i_ext > 0 then
for now_ext_attr_num = 1, item.star do
local value = g_conf.ext_attrs[(chainhelper:random() % i_ext)+1]
local val = value.base
if value._float ~= nil then
val = value.base + chainhelper:random() % (value._float + 1)
end
item.ext_attrs[now_ext_attr_num] = { key = value.key, value = val }
end
end
end
return item
end
function add_gid()
_ContractConfig()
assert(contract_base_info.invoker_contract_id == G_CONFIG.PLAYERS_CONTRACT_ID,
"#没有权限!#")
read_list = {public_data = {now_gid=true}}
chainhelper:read_chain()
public_data.now_gid = public_data.now_gid + 1
write_list = {public_data = {now_gid=true}}
chainhelper:write_chain()
end
function create_item_to_package(gid, num)
_init_items_config()
local g_conf = _items_config[gid]
assert(type(num) == "number", "#num参数不正确!#")
assert(num > 0, "#num参数不正确!#")
num = math.floor(num)
assert(g_conf ~= nil, "#没听说有这个道具!#")
while( num > 0 )
do
local item = _create_item(gid)
-- 写入背包
if g_conf.isRandom then
CPlayerPackage.pickup_item(item.cid, item)
else
item.count = num
CPlayerPackage.pickup_item(item.cid, item)
return
end
num = num - 1
end
end
function init()
assert(chainhelper:is_owner(), "#没有权限!#")
public_data._items_config = {}
public_data.now_gid = 0
write_list = {public_data = {}}
chainhelper:write_chain()
end
function write_conf(gid, conf)
assert(chainhelper:is_owner(),"#没有权限!#")
read_list = {public_data = {_items_config={}}}
chainhelper:read_chain()
public_data._items_config[gid] = cjson.decode(conf)
write_list = {public_data = {_items_config=true}}
chainhelper:write_chain()
end
function test() chainhelper:log('!- 3') end