
dp2实现特定爆装获取奖励,联动红包抽奖
//-----------------------------------下方为捡指定代码才会公告且发奖励,如果不需要整段删除-----------------------------------
var specialItemIds = [108040416, 104000541, 102030477, 101040485,100060016];
var redpackets = [202404753, 202404754, 202404755, 202404756, 10300052, 10300053, 10300054, 10300055, 10300056, 10300057,
10300058, 10300059, 10300060, 10300061, 10300062, 10300063, 10300064, 10300065, 10300066, 10300067,
10300068, 10300069, 10300070, 10300071, 10300072, 10300073, 10300074, 10300075, 10300076, 10300077,
10300078, 10300079, 10300080, 10300081, 10300082, 10300083, 10300084, 10300085, 10300086, 10300087,
10300088, 10300089, 10300090, 10300091, 10300092, 10300093, 10300094, 10300095, 10300096, 10300097,
10300098, 10300099, 10300100, 10300101, 10300102, 10300103, 10300104, 10300105, 10300106, 10300107,
10300108, 10300109, 10300110, 10300111, 10300112, 10300113, 10300114, 10300115, 10300116, 10300117,
10300118, 10300119, 10300120, 10300121, 10300122, 10300123, 10300124, 10300125, 10300126, 10300127,
10300128, 10300129, 10300130, 10300131, 10300132, 10300133, 10300134, 10300135, 10300136, 10300137,
10300138, 10300139, 10300140, 10300141, 10300142, 10300143, 10300144, 10300145, 10300146, 10300147, 10300196, 10300197,
10300198, 10300199, 10300200, 10300201, 10300202, 10300203, 10300204, 10300205, 10300206, 10300207,
10300208, 10300209, 10300210, 10300211, 10300212, 10300213, 10300214, 10300215, 10300216, 10300217,
10300218, 10300219, 10300220, 10300221, 10300222, 10300223, 10300224, 10300225, 10300226, 10300227,
10300228, 10300229, 10300230, 10300231, 10300232, 10300233, 10300234, 10300235, 10300236, 10300237,
10300238, 10300239, 10300240, 10300241, 10300242, 10300243, 10300244, 10300245, 10300246, 10300247,
10300248, 10300249, 10300250, 10300251, 10300252, 10300253, 10300254, 10300255, 10300256, 10300257,
10300258, 10300259, 10300260, 10300261, 10300262, 10300263, 10300264, 10300265, 10300266, 10300267,
10300268, 10300269, 10300270, 10300271, 10300272, 10300273, 10300274, 10300275, 10300276, 10300277,
10300278, 10300279, 10300280, 10300281, 10300282, 10300283, 10300284, 10300285, 10300286, 10300287,
10300288, 10300289, 10300290, 10300291, 10300292, 10300293, 10300294, 10300295, 10300296, 10300297,
10300298, 10300299, 10300300, 10300301, 10300302, 10300303, 10300304, 10300305, 10300306, 10300307,
10300308, 10300309, 10300310, 10300311, 10300312, 10300313, 10300314, 10300315, 10300316, 10300317,
10300318, 10300319, 10300320, 10300321, 10300322, 10300323, 10300324, 10300325, 10300326, 10300327,
10300328, 10300329, 10300330, 10300331, 10300332, 10300333, 10300334, 10300335, 10300336, 10300337,
10300338, 10300339, 10300340, 10300341, 10300342, 10300343, 10300344, 10300345, 10300346, 10300347,
10300348, 10300349, 10300350, 10300351, 10300352, 10300353, 10300354, 10300355, 10300356, 10300357,
10300358, 10300359, 10300360, 10300361, 10300362, 10300363, 10300364, 10300365, 10300366, 10300367,
10300368, 10300369, 10300370, 10300371, 10300372, 10300373, 10300374, 10300375, 10300376, 10300377,
10300378, 10300379, 10300380, 10300381, 10300382, 10300383, 10300384, 10300385, 10300386, 10300387,
202310161, 202310162, 202310163, 202310164, 202310165, 202310166, 202310167,202310173, 202310174, 202310175, 202310176, 202310177, 202310178, 202310179, 202310180,
202310181, 202310182, 202310183, 202310184, 202310185, 202310186, 202310187, 202310188];
// 判断 item_id 是否在特定数值数组中
function isItemIdSpecial(item_id)
{
for (var i = 0; i < specialItemIds.length; i++)
{
if (specialItemIds[i] === item_id)
{
return true;
}
}
return false;
}
// 在你的代码中使用 isItemIdSpecial 函数来判断 item_id 是否为特定数值
if (isItemIdSpecial(item_id))
{
var num = get_random_int(0,285);
yb_reward = redpackets[num];
//-------------下方为奖励无色,需要则替换代码和数量,不需要则删除-------------
number = 1 //5个
api_CUser_AddItem(user, yb_reward, number)
//-------------上方为奖励无色,需要则替换代码和数量,不需要则删除-------------
//-------------下方为奖励点券,需要则替换数量,不需要则删除-------------
rewardAmount = rewardAmount * 10 //点券奖励10点
api_recharge_cash_cera(user, rewardAmount);
//-------------上方为奖励点券,需要则替换数量,不需要则删除-------------
api_gameWorld_SendNotiPacketMessage('--------------天道酬勤--------------\n幸运玩家[' + api_CUserCharacInfo_getCurCharacName(user) + ']在地下城中获得了:\n[' + api_CItem_getItemName(item_id) + ']\n☆奖励☆[' + api_CItem_getItemName(yb_reward)+ 'x' + number + ']\n☆奖励☆[点券+' + rewardAmount + ']', 14);
}
//-----------------------------------上方为捡指定代码才会公告且发奖励,如果不需要整段删除-----------------------------------
以上为我自己改写的制定爆装奖励代码,联动红包,爆装部分。
代码逻辑解释:
我们首先看到specialItemIds和redpackets,分别是爆装触发池,一个是红包奖励池。解释一下就是爆出这四个装备,给西面的道具。这里是定义了两个池子。
实际运作起来,isItemIdSpecial这个函数,首先是判断获取的道具是否是触发池内的道具,如果是的话,则生成一个随机数,从0-285中生成一个数字。然后再上面的列表内用下标找到奖励的红包代码。然后给玩家发送。
//角色使用道具触发事件
function UserUseItemEvent(user, item_id) {
if (1047 == item_id)
{
//use_ftcoin_change_luck_point(user);//使用命运硬币调用幸运函数[1%]几率拉满[1%]几率归零,如果需要则删除use前的//
}
else if (123016 == item_id)
{
clear_doing_questEx(user,[1014, 2351, 1147]);//完成指定代码任务并获得奖励
}
else if (123017 == item_id)
{
Top_up_Lucky_Points(user);//幸运值拉满到99999,1-3盘左右满地史诗,然后幸运值会极速降低
}
else if (123013 == item_id)
{
api_CUser_ReturnToSelectCharacList(user);//使用女鬼转职券后自动退出到角色选择界面
}
else if (123020 == item_id)//装备回收兑换道具
{
recoverEqu(user)
}
else if ((item_id >= 10300052) && (item_id <= 10300387))
{
var num = get_random_int(0,67);
var quanlist = [7860,8063,8233,8234,8235,8236,8237,8308,8309,8311,8312,8313,8314,8315,8316,8317,8318,8320,8321,8322,8323,8324,10000536,10099104,10099105,10099110,10099111,10099112,10099113,10002514,10008086,10008087,10008088,10008089,10008090,10008091,10008092,10008093,10008094,10008095,10008096,10008097,10008098,10008099,10008100,10008101,10008102,10008103,10008104,10008105,10008106,10008107,10008079,10008080,10008081,10008082,10008083,10008084,10008085,490006041,10158010,490005014,490002020,490003030,390002017,390002019,490002021,490002022,490002023,490002024,490002025,490002026,490016313,490016314];
var yb_reward = quanlist[num];
var number = 1;
api_CUser_AddItem(user, yb_reward, number);
send_reward_all(user, item_id);//口令红包
}
else if ((item_id >= 202404753) && (item_id <= 202404756))
{
rechargeCeraBasedOnItemId(user, item_id);//点券充值
}
else if (item_id == 10000113)
{
unlock_all_dungeon_difficulty(user);
api_CUser_SendNotiPacketMessage(user, '已解锁所有副本难度,请当前角色小退刷新。', 1);
}
else if(item_id == 123001)
{
//crossover(user, item_id, excludedItemIds)//跨界石
}
else if(item_id == 123007)
{
equInherit(user, item_id)// 装备继承
}
}
以上为整段使用道具触发代码
else if ((item_id >= 10300052) && (item_id <= 10300387))
{
var num = get_random_int(0,67);
var quanlist = [7860,8063,8233,8234,8235,8236,8237,8308,8309,8311,8312,8313,8314,8315,8316,8317,8318,8320,8321,8322,8323,8324,10000536,10099104,10099105,10099110,10099111,10099112,10099113,10002514,10008086,10008087,10008088,10008089,10008090,10008091,10008092,10008093,10008094,10008095,10008096,10008097,10008098,10008099,10008100,10008101,10008102,10008103,10008104,10008105,10008106,10008107,10008079,10008080,10008081,10008082,10008083,10008084,10008085,490006041,10158010,490005014,490002020,490003030,390002017,390002019,490002021,490002022,490002023,490002024,490002025,490002026,490016313,490016314];
var yb_reward = quanlist[num];
var number = 1;
api_CUser_AddItem(user, yb_reward, number);
send_reward_all(user, item_id);//口令红包
}
这单独的一段是使用红包触发代码。是使用10300052-10300387这个道具池的道具,会触发奖励。逻辑也比较简单。同样是通过随机数实现奖励。奖励池上面是用quanlist作为变量名写的。
可以看到,基本大同小异。我都是通过定义奖励池,生成随机数,发送奖励。这一套思路来做的。
在实际的运作中,我们其实可以根据物品的稀有度,生成权重。这里给一个简单思路。我们奖励池有100个道具,其中10个是毕业道具。如果这个抽奖概率是平均的。也就是说中奖率是10。这样看起来是否有点高。而我们这个抽奖是专门抽取增幅券的。也不好放其他的东西进来稀释概率。我们可以设置双重随机。我们可以这样做
以下为代码逻辑描述
首先生成一个0-99的随机数。生成89-99,也就是10概率,我们进入第二个随机池。第二个随机池同样是0-99,我们设置0-49,如果第二次随机是落在了这个区间,也就是50%概率,我们进入最终的10个毕业道具的抽奖池。概率最终被稀释成了5%,我们只需要控制随机池的大小即可。也就是给两个奖池。第二次随机未触发的,直接进入非10个毕业道具的奖池去抽。这样非10个毕业道具的获得率为95%。这样就控制了获取概率。
我写到这里,不禁想到,为什么不直接0-9999,抽到0-99的也就是1%进毕业道具池。这样还不用随机两次。不用暂用资源。我感觉我应该是累了。哈哈。