From 4d9fee9b11aba248c8d5cad39d5b1d1f6eeffd07 Mon Sep 17 00:00:00 2001 From: sk <123456@qq.com> Date: Sun, 28 Apr 2024 10:13:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=BA=E5=99=A8=E4=BA=BA=E4=BA=92=E5=8A=A8?= =?UTF-8?q?=E8=A1=A8=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/constant.go | 4 + data/DB_GameItem.dat | Bin 3807 -> 7376 bytes data/DB_GameItem.json | 1197 +++++++++++++++++++++++++++++++- data/DB_GiftCard.dat | Bin 57 -> 57 bytes data/DB_PropExchange.dat | 6 +- data/DB_Task.dat | Bin 1999 -> 1999 bytes gamerule/tienlen/card.go | 29 + public | 2 +- robot/base/interaction.go | 58 ++ robot/tienlen/sctienlen.go | 65 ++ robot/tienlen/tienlenplayer.go | 5 +- robot/tienlen/tienlenscene.go | 6 +- xlsx/DB_GameItem.xlsx | Bin 38144 -> 42655 bytes 13 files changed, 1354 insertions(+), 18 deletions(-) create mode 100644 robot/base/interaction.go diff --git a/common/constant.go b/common/constant.go index 4b5b5c3..8293072 100644 --- a/common/constant.go +++ b/common/constant.go @@ -613,6 +613,10 @@ const ( ItemIDWeekScore = 100004 // 周活跃积分 ItemIDGiftBox = 50001 // 碎片礼盒 ItemIDCollectBox = 50002 // 集卡礼盒 + ItemIDLike = 100007 // 点赞 + ItemIDCoffee = 100008 // 咖啡 + ItemIDBucket = 100009 // 水桶 + ItemIDSlippers = 100010 // 拖鞋 ) func ToItemId(id int32) int32 { diff --git a/data/DB_GameItem.dat b/data/DB_GameItem.dat index 0719886b450ae70dfa5a59099ab51522d2b9bf47..a4a78db034a51389ab13bf9eae2f05a0ad721561 100644 GIT binary patch literal 7376 zcmchcO-y6g6~}onLoTmGuAGikWf7^f=`4Y^s+3i#sMADpaf-^6YBud+7LBS%MUfhH zg#jDefWOAZVQhnqZ7>ip#s=(X8!KtDNcy29%||EcW}0_DUN^Jur+Tihu^$dXj-O{X zmId$p&i|f!&bjAZ%T5XT$IZiJC9D+_bi+ek3s3h;()9sJ>boJ04fOR%&+?Dwq!*mu zeo310j=y|$bYx^?blR#`qcoU#Sh)wEs^Y=R3sl*9SXp9QNiAr@`*G^p7TkxG2=-=i zG{d$6%yo#}>uj#7C62V%hFYzG`4=;@vh0#jA}X1OHTwxJhT66CpVRWbW1t~stS)B! zaxucM0Cyw?!m`1&u-Gw9=P%dNj0=}CHr*G+L>6GXpDb_S zkOQxK)Z(5<0Z1J2cQTtHb9uIDqxa?^gYaD&&kj}D!V3ye@aa5&e)_9Bul)MXE7Y@1 z@*!Z5%~|SMARZURt*qtHnD(s@{lhB*R zezOTX;@A;^-POVwn$EPExz5iEzVT+x{JgC{5O*5;mYWn+S%i9O_l&)>*d15PWis#8 zf}14101kQU_nhFB;d=Za>#i{UsD*tQ;o z+r0h`{RO-}`D5&^d z$W!Pe?)wK{(f7ARL)N39nKrsjz4rq7V@@7_6y#4h`A3g}{3$0}9|ifZI?Y;nzOy~< zD9-mexv_)2C4a`rjlAqF`EySGp@?%Y$v;DX1M)C)2gq7f;5#U#4#Ip3J@{zA{PkDG z{J{1PsA~zY>e{5K)sCm6Uq~-QgLmIw*EBOCc$>7(XevymN{xS zH>t%PRZ*Ic$`+IY+hJ%S>|~B^WwF!IGS?j!Q}rl3L$Y2HPK!nhT>=)ax0Jt&(p<@{ z7hj@fueP()Ldoq)S`W!qvD9 zgq=EJaYb8O?22#`ZFyjGaWu(hW?0gO9lF$dqCFbl)TgE1M!tzMoI?w{Gd(ju)@I_2nXfb(%(PiBX> zcGc1;j-@)~5SAUny^G911Jcf^AJ&1p2dPknPe zp#7(=?Ks~H+64M9(1x)s&6Hi3&Zwss9qfO=9KyLAjvlb;rr{+|pa&m-NV2NH?Xwsm zd%*lVXW~+x#NZ-U_DRwb3MSm zdmpgu*p7>{tgy#tndS{M{2b9`T~DI-I95yfu*c3X*5FI?rnh^n75xFQd|<=X+?Q_J zx)|7Qqdx-h8vIN`m6}+-T6vw!#e1RlHu@8XH@anDiJp4!eu+D!FDp}3K%hyG>k6pxM0v!Swei8~`C9GDxc)w;??Ig+r(*$qxaJa)Ac#ou7(5ePy zi&I-PXS~~6(LJCIX~}iSSaMi0yy_QG1b_oHVtk&lpeSFdX3zCPm<7e^v|@rq;MLMt GD*hii?IPy@ delta 332 zcmca$d0%#e4?AP|WM6hOMu*89>?V_Uv-2|gPd>?RrX=xlcH7gn)1PhG{j_Vv)7FX4 zdKW!iI_+uKMlOGjt8L6eynd4}uqgWHLPkpTeaShf!U diff --git a/data/DB_GameItem.json b/data/DB_GameItem.json index 0f1d7ab..55de895 100644 --- a/data/DB_GameItem.json +++ b/data/DB_GameItem.json @@ -437,7 +437,7 @@ "Composition": 1, "CompositionMax": 9999, "Location": "0", - "Describe": "作用:获取金币或道具奖励\n产出途径:集字活动" + "Describe": "集卡礼盒:开启后可获得奖励\n产出途径:集字活动" }, { "Id": 50004, @@ -467,7 +467,7 @@ "Composition": 1, "CompositionMax": 9999, "Location": "0", - "Describe": "集字活动兑换奖励" + "Describe": "可在集字活动中兑换物品" }, { "Id": 50005, @@ -497,7 +497,7 @@ "Composition": 1, "CompositionMax": 9999, "Location": "0", - "Describe": "集字活动兑换奖励" + "Describe": "可在集字活动中兑换物品" }, { "Id": 50006, @@ -527,7 +527,7 @@ "Composition": 1, "CompositionMax": 9999, "Location": "0", - "Describe": "集字活动兑换奖励" + "Describe": "可在集字活动中兑换物品" }, { "Id": 50007, @@ -557,7 +557,7 @@ "Composition": 1, "CompositionMax": 9999, "Location": "0", - "Describe": "集字活动兑换奖励" + "Describe": "可在集字活动中兑换物品" }, { "Id": 50008, @@ -587,7 +587,7 @@ "Composition": 1, "CompositionMax": 9999, "Location": "0", - "Describe": "集字活动兑换奖励" + "Describe": "可在集字活动中兑换物品" }, { "Id": 50009, @@ -617,7 +617,7 @@ "Composition": 1, "CompositionMax": 9999, "Location": "0", - "Describe": "集字活动兑换奖励" + "Describe": "可在集字活动中兑换物品" }, { "Id": 50010, @@ -647,7 +647,7 @@ "Composition": 1, "CompositionMax": 9999, "Location": "0", - "Describe": "集字活动兑换奖励" + "Describe": "可在集字活动中兑换物品" }, { "Id": 50011, @@ -677,7 +677,7 @@ "Composition": 1, "CompositionMax": 9999, "Location": "0", - "Describe": "集字活动兑换奖励" + "Describe": "可在集字活动中兑换物品" }, { "Id": 50012, @@ -707,7 +707,35 @@ "Composition": 1, "CompositionMax": 9999, "Location": "0", - "Describe": "集字活动兑换奖励" + "Describe": "可在集字活动中兑换物品" + }, + { + "Id": 60001, + "Name": "tienlen记牌器", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 15, + "Effect0": [ + 0, + 0, + 0 + ], + "Effect": [ + 0, + 0, + 0 + ], + "CompositionMax": 1, + "Time": 1, + "Location": "0", + "Describe": "tienlen游戏记录打出过的牌" }, { "Id": 100001, @@ -1145,6 +1173,1153 @@ "Location": "0", "Describe": "测试描述雷动九天" }, - {} + { + "Id": 71001, + "Name": "电饭煲", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 71002, + "Name": "电热水壶", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 71003, + "Name": "便携式风扇", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 72001, + "Name": "厨房炊具套装", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 72002, + "Name": "床上用品套件", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 72003, + "Name": "洗衣液", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 72004, + "Name": "水杯", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 72005, + "Name": "咖啡杯", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 73001, + "Name": "啤酒", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 73002, + "Name": "矿泉水", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 73003, + "Name": "果汁", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 73004, + "Name": "可乐", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 74001, + "Name": "护肤品套装", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 74002, + "Name": "洗发水和护发素", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 74003, + "Name": "电动牙刷", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 74004, + "Name": "香水", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 74005, + "Name": "按摩器", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 75001, + "Name": "瑜伽垫", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 75002, + "Name": "跳绳", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 75003, + "Name": "篮球", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 75004, + "Name": "足球", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 75005, + "Name": "健身手环", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 75006, + "Name": "山地车", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 76001, + "Name": "智能手机", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 76002, + "Name": "平板电脑", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 76003, + "Name": "耳机", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 76004, + "Name": "智能手表", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 76005, + "Name": "便携式音箱", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 77001, + "Name": "超市购物卡", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 77002, + "Name": "餐厅用餐券", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 77003, + "Name": "电影票", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 77004, + "Name": "在线购物优惠券", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 77005, + "Name": "按摩和美容服务", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 78001, + "Name": "本地景点门票", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 78002, + "Name": "酒店住宿", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 78003, + "Name": "游乐场门票", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 79001, + "Name": "大米", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 79002, + "Name": "食用油", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 79003, + "Name": "盐", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 79004, + "Name": "酱油", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + }, + { + "Id": 79005, + "Name": "鸡蛋", + "ShowLocation": [ + 1, + 1 + ], + "Classify": [ + 1, + 1, + 0 + ], + "Type": 4, + "Effect0": [ + 0, + 1, + 0 + ], + "Effect": [ + 0, + 1, + 0 + ], + "Composition": 1, + "CompositionMax": 9999, + "Location": "0", + "Describe": "可联系客服兑换实物奖励" + } ] } \ No newline at end of file diff --git a/data/DB_GiftCard.dat b/data/DB_GiftCard.dat index 15600367ff42a73b75826e6378f02a3bde3a8661..96640b07f274cbbbda035ee3e52503c8356a73cb 100644 GIT binary patch delta 38 pcmcDtoFJjd$+57PP2j+^jZ8{x92eV|1-P_0AVMv+2JBXh3;@YB39kSE delta 38 pcmcDtoFJjd#&NNYS%6E4lVf2oo4|o-8=15?Aj}q919mG$1^~Z739kSE diff --git a/data/DB_PropExchange.dat b/data/DB_PropExchange.dat index 32773be..1b90e94 100644 --- a/data/DB_PropExchange.dat +++ b/data/DB_PropExchange.dat @@ -1,5 +1,5 @@ -6ԆՆֆ׆ӆ"= +6Նֆ׆ӆԆ"= .؆نچۆ"= -WنچۆՆֆ׆ӆԆ؆"  -]܆ӆֆچۆنԆՆ׆؆" \ No newline at end of file +WۆՆ׆؆چӆԆֆن"  +]ۆӆԆՆ؆܆ֆ׆نچ" \ No newline at end of file diff --git a/data/DB_Task.dat b/data/DB_Task.dat index bb902ad353159639ab252377f50050e01a18ad96..8fdc4061386831c4e9120576a186ba8d1b425ae5 100644 GIT binary patch delta 199 zcmX@lf1Y1~ONoO~fKh@`fl-6efYFMBV_`3wz=bwuD>jZLKo;vng>XT1L9U4%XD2r^ z2~JL9+%)+Lqo9fimm-I-0J8*(0LbxDAkPAt$<1A2c z5l{t8@IZ_0= 2 { + me.PassTimes = 0 + // 机器人过牌两次 + base.SendEmote(s, me, base.Emote2) + } } + } else { //操作失败 switch scTienLenOp.GetOpCode() { case tienlen.TienLenPlayerOpPlay: //出牌操作失败,改为过 @@ -440,6 +460,10 @@ func (this *SCTienLenCurOpPosHandler) Process(s *netlib.Session, packid int, pac exDelayTs = notExDelayTs minS = notExDelayminS maxS = notExDelaymaxS + if scene.FirstWinSnid == 0 { + base.SendEmote(s, p, base.Emote5) + scene.FirstWinSnid = me.SnId + } } base.DelaySendMillisecond(s, int(proto_tienlen.TienLenPacketID_PACKET_CSTienLenPlayerOp), packOp, []int{exDelayTs + minS, exDelayTs + maxS}...) } @@ -573,6 +597,45 @@ func (this *SCTienLenAIHandler) Process(s *netlib.Session, packid int, pack inte return nil } +func SCRoomEvent(s *netlib.Session, packid int, pack interface{}) error { + logger.Logger.Tracef("SCRoomEvent %v", pack) + msg, ok := pack.(*gamehall.SCRoomEvent) + if !ok { + return nil + } + + if msg.Content == "" || len(msg.Param) == 0 { + return nil + } + + scene, ok := base.GetScene(s).(*TienLenScene) + if !ok { + return nil + } + + p := scene.GetMe(s) + if p == nil { + return nil + } + + pos, err := strconv.Atoi(msg.GetContent()) + if err != nil { + return nil + } + if p.GetPos() != int32(pos) { + return nil + } + + switch msg.Param[0] { + case common.ItemIDBucket, common.ItemIDSlippers: + base.SendEmote(s, p, base.Emote3) + case common.ItemIDLike, common.ItemIDCoffee: + base.SendEmote(s, p, base.Emote4) + } + + return nil +} + func init() { //SCTienLenRoomInfo netlib.RegisterHandler(int(proto_tienlen.TienLenPacketID_PACKET_SCTienLenRoomInfo), &SCTienLenRoomInfoHandler{}) @@ -598,4 +661,6 @@ func init() { //SCTienLenAIData netlib.RegisterHandler(int(proto_tienlen.TienLenPacketID_PACKET_SCTienLenAI), &SCTienLenAIHandler{}) netlib.RegisterFactory(int(proto_tienlen.TienLenPacketID_PACKET_SCTienLenAI), &SCTienLenAIPacketFactory{}) + // SCRoomEvent + netlib.Register(int(gamehall.GameHallPacketID_PACKET_SCRoomEvent), gamehall.SCRoomEvent{}, SCRoomEvent) } diff --git a/robot/tienlen/tienlenplayer.go b/robot/tienlen/tienlenplayer.go index 81045d4..a05257a 100644 --- a/robot/tienlen/tienlenplayer.go +++ b/robot/tienlen/tienlenplayer.go @@ -12,7 +12,8 @@ var TienLenNilPlayer *TienLenPlayer = nil type TienLenPlayer struct { base.BasePlayer *proto_tienlen.TienLenPlayerData - data *tienlenApi.PredictRequest + data *tienlenApi.PredictRequest + PassTimes int } func NewTienLenPlayer(data *proto_tienlen.TienLenPlayerData) *TienLenPlayer { @@ -26,7 +27,7 @@ func (p *TienLenPlayer) Init() { } func (p *TienLenPlayer) Clear() { - + p.PassTimes = 0 } func (p *TienLenPlayer) MarkFlag(flag int32) { diff --git a/robot/tienlen/tienlenscene.go b/robot/tienlen/tienlenscene.go index 201aefd..824e68c 100644 --- a/robot/tienlen/tienlenscene.go +++ b/robot/tienlen/tienlenscene.go @@ -13,7 +13,10 @@ import ( type TienLenScene struct { base.BaseScene *proto_tienlen.SCTienLenRoomInfo - players map[int32]*TienLenPlayer + players map[int32]*TienLenPlayer + LastCards []int32 // 上一个机器人出的牌 + LastOpSnid int32 // 上一个出牌的机器人 + FirstWinSnid int32 // 第一个出完牌的玩家id } type filterFunc func(*TienLenScene, *TienLenPlayer, []int32, []int32, []int32, bool) (bool, []int32) @@ -47,6 +50,7 @@ func (s *TienLenScene) GetIsAllAi() bool { return i == 4 } func (s *TienLenScene) Clear() { + s.FirstWinSnid = 0 for _, p := range s.players { p.Clear() } diff --git a/xlsx/DB_GameItem.xlsx b/xlsx/DB_GameItem.xlsx index 7f504b892a9675f1173c852353b023f208f08a2f..be7610142d432584d5d05b669fc429e5b8aede62 100644 GIT binary patch delta 17447 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 T*8Y1S0~c%{8_Gid)4~4-tk7zE delta 12898 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