--#include "data\config\item\NormalItem.txt" once --#include "data\functions\ItemEvent\ItemUseCount.txt" once --回城券,随机传送卷 function BackToCityFunc(sysarg,count,itemidx,itemPtr,ItemTable) --count 无效,一次只能用一个 if not Actor.canUseItem(sysarg,itemidx) then Actor.sendTipmsg( sysarg, Lang.Script.UserItem001,ttTipmsgWindow ) return false end --红名 if Actor.GetNameColorData(sysarg) == 3 then Actor.sendTipmsg(sysarg,Lang.Script.UserItem002,ttFlyTip) return false end --其他限制尚未添加... if ItemTable.usedura == false then Actor.removeItemByPtr(sysarg, itemPtr, 1, true, Lang.Log.UserItem001, 166) else local duaMax = Item.getItemProperty( sysarg, itemPtr, Item.ipItemDuaMax, 0) local dua = Item.getItemProperty( sysarg, itemPtr, Item.ipItemDua, 0 ) local duaRemain = duaMax - dua if duaRemain < 1000 then return false end dua = dua + 1000 Item.setItemProperty( sysarg, itemPtr, Item.ipItemDua, dua) if dua == duaMax then Actor.removeItemByPtr(sysarg, itemPtr, 1, true, Lang.Log.UserItem001, 166) end end local sendType = ItemTable.type or 2 if sendType == 1 then System.telportScene(sysarg, ItemTable.SceneId, ItemTable.x, ItemTable.y) elseif sendType == 2 then System.telportRandPos(sysarg) elseif sendType == 3 then Actor.returnCity(sysarg) end return true end --经验丹 function UseExpItemFunc(sysarg,count,itemidx,itemPtr,ItemTable) --不能堆叠,一次只能吃一个 local idx1 = 0 local idx2 = 0 local level = Actor.getIntProperty(sysarg, PROP_CREATURE_LEVEL) for k, v in ipairs(ExpItem) do if v.item_id == itemidx then idx1 = k for x,y in ipairs(v.level) do if level >= y.min and level <= y.max then idx2 = x break end end break end end if idx1 == 0 or idx2 == 0 then return false end local upLevel = ExpItem[idx1].level[idx2].level local upExp = ExpItem[idx1].level[idx2].exp --转数判断 local ReachLevel = Actor.AddExpReachLevel(sysarg,upExp) local circle = Actor.getIntProperty(sysarg, PROP_ACTOR_CIRCLE) local circleMaxLevel = System.getPlayerMaxLevel(circle) if upExp > 0 and ReachLevel > circleMaxLevel then local str = string.format(Lang.Script.ExpItem001,circleMaxLevel) Actor.sendTipmsg(sysarg,str,ttFlyTip) return elseif upExp > 0 and level == circleMaxLevel then local levelupExp = Actor.GetLevelExp(sysarg,level+1) local actorExp = Actor.getUInt64Property(sysarg, PROP_ACTOR_EXP) if actorExp + upExp > levelupExp then local str = string.format(Lang.Script.ExpItem001,circleMaxLevel) Actor.sendTipmsg(sysarg,str,ttFlyTip) return end end --判断是否到本转最高级 if level == circleMaxLevel and upLevel > 0 then local str = string.format(Lang.Script.ExpItem001,circleMaxLevel) Actor.sendTipmsg(sysarg,str,ttFlyTip) return end local delCount = Actor.removeItemByPtr(sysarg, itemPtr, 1, true, Lang.Log.UserItem002, 183) if delCount < 1 then return false end if upLevel > 0 then Actor.giveAward(sysarg, qatUpgrade,0,upLevel,0,0,0,0,183, Lang.Log.UserItem002) end if upExp > 0 then Actor.giveAward(sysarg, qatExp,0,upExp,0,0,0,0,183, Lang.Log.UserItem002) end return true end --战神油 function repairAllEquipItemFunc(sysarg,count,itemidx,itemPtr,ItemTable) -- count 无效,不能批量使用 local repairTabEquip = {} local repairTabMaxDua = {} local equipCount = Item.getEquipCount( sysarg ) --玩家穿着装备数 for i = 1, equipCount do local equipPtr = Item.getEquipBySortID( sysarg, i ) if equipPtr then local curDua = Item.getItemProperty( sysarg, equipPtr, Item.ipItemDua, 0 ) local maxDua = Item.getItemProperty( sysarg, equipPtr, Item.ipItemDuaMax, 0 ) if curDua < maxDua then table.insert(repairTabEquip, equipPtr) table.insert(repairTabMaxDua, maxDua) end end end local msgId = Lang.Script.zf045 if #repairTabEquip > 0 then if ItemTable.needDelete then if Actor.removeItemByPtr(sysarg, itemPtr, 1, true, Lang.Log.l00111, 190) <= 0 then return false end end for idx, equipPtr in ipairs(repairTabEquip) do Item.setItemProperty( sysarg, equipPtr, Item.ipItemDua, repairTabMaxDua[idx] ) end msgId = Lang.Script.zf044 end Actor.sendTipmsg(sysarg, msgId, ttChatWindow) return true end --祝福油 function useBlessOilFunc(sysarg,count,itemidx,itemPtr,ItemTable) -- count无效,不能批量使用祝福油 local weaponPtr = Item.getEquipByType(sysarg, Item.itWeapon) if not weaponPtr then Actor.sendTipmsg(sysarg, Lang.Script.itemFunctionTips000001, ttFlyTip) return false end local luckVal = Item.getItemProperty(sysarg, weaponPtr, Item.ipItemLuck, 0) local msgId = string.format(Lang.Script.itemFunctionTips000002,luckVal) if luckVal < 0 then luckVal = luckVal + ItemTable.blessVal if luckVal >= 0 then msgId = string.format(Lang.Script.itemFunctionTips000003,luckVal) else msgId = string.format(Lang.Script.itemFunctionTips000004,-luckVal) end else if ItemTable.maxLv > 0 and luckVal >= ItemTable.maxLv then Actor.sendTipmsg(sysarg, string.format(Lang.Script.itemFunctionTips000007,ItemTable.maxLv), ttChatWindow + ttFlyTip) return end local succRates = ItemTable.succRate[luckVal + ItemTable.blessVal] or ItemTable.succRate[#ItemTable.succRate] local noChgRates = ItemTable.noChgRate[luckVal + ItemTable.blessVal] or ItemTable.noChgRate[#ItemTable.failRate] local randVal = math.random(10000) if randVal <= succRates then --成功 luckVal = luckVal + ItemTable.blessVal msgId = string.format(Lang.Script.itemFunctionTips000003,luckVal) elseif randVal > (succRates + noChgRates) then--失败 luckVal = luckVal - ItemTable.blessVal if luckVal >= 0 then msgId = string.format(Lang.Script.itemFunctionTips000005,luckVal) else msgId = string.format(Lang.Script.itemFunctionTips000006,-luckVal) end end end if Actor.removeItemByPtr(sysarg, itemPtr, 1, true, "use Blessing oil", 3) > 0 then Item.setItemProperty(sysarg, weaponPtr, Item.ipItemLuck, luckVal ) Actor.sendTipmsg(sysarg, msgId, ttChatWindow + ttFlyTip) end return true end --初始化物品使用时回调 function UseNormalItemFunc_Init(sysarg) --回城卷 for k, v in ipairs(BackToCity) do GlobalItemFn[v.item_id] = {func = BackToCityFunc,params = v} end --经验丹 for k, v in ipairs(ExpItem) do GlobalItemFn[v.item_id] = {func = UseExpItemFunc,params = v} end --战神油 for i = 1,table.getn(RepairItems) do local x = RepairItems[i] GlobalItemFn[x.item_id] = { func = repairAllEquipItemFunc, params = x } end --祝福油 for idx, x in ipairs(BlessOil) do GlobalItemFn[x.item_id] = {func = useBlessOilFunc,params = x} end end table.insert(InitFnTable, UseNormalItemFunc_Init)