| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354 |
- package model
- import (
- "math"
- "math/rand"
- "rocommon/service"
- "rocommon/util"
- "roserver/baseserver/model"
- "roserver/baseserver/set"
- "roserver/serverproto"
- "time"
- )
- func (this *Role) ActivitiesExchange(msg *serverproto.CSActivitiesExchangeReq) {
- if this.roleActivity != nil {
- ret := this.roleActivity.ActivitiesExchange(msg, nil)
- if ret != serverproto.ErrorCode_ERROR_OK {
- ackMsg := &serverproto.SCActivitiesExchangeAck{
- ActivityId: msg.ActivityId,
- RewardIdx: msg.RewardIdx,
- Error: int32(ret),
- }
- this.ReplayGate(ackMsg, true)
- }
- }
- }
- func (this *Role) ActivitiesReward(activityId, param, rewardNum int32) {
- if this.roleActivity != nil {
- ret := this.roleActivity.ActivitiesReward(activityId, param, rewardNum)
- if ret != serverproto.ErrorCode_ERROR_OK {
- ackMsg := &serverproto.SCActivitiesRewardAck{
- ActivityId: activityId,
- Error: int32(ret),
- }
- this.ReplayGate(ackMsg, true)
- }
- }
- }
- func (this *Role) SetCollectionNotice(activityId int32, CollectId int32, notice bool) {
- ackMsg := &serverproto.SCActivitiesWordNoticeSetAck{
- ActivityId: activityId,
- Error: int32(serverproto.ErrorCode_ERROR_FAIL),
- CollectId: CollectId,
- NoNotice: notice,
- }
- if this.roleActivity != nil {
- ret := this.roleActivity.SetCollectNotice(activityId, CollectId, notice)
- ackMsg.Error = int32(ret)
- }
- this.ReplayGate(ackMsg, true)
- }
- func (this *Role) ActivitiesScoreReward(activityId, boxId int32) {
- if this.roleActivity != nil {
- ret := this.roleActivity.ActivitiesScoreReward(activityId, boxId)
- if ret != serverproto.ErrorCode_ERROR_OK {
- ackMsg := &serverproto.SCActivitiesScoreRewardAck{
- ActivityId: activityId,
- Error: int32(ret),
- }
- this.ReplayGate(ackMsg, true)
- }
- }
- }
- func (this *Role) ActivitiesFirstChargeReward() {
- if this.roleActivity == nil {
- return
- }
- ret := this.roleActivity.ActivitiesFirstChargeReward()
- if ret != serverproto.ErrorCode_ERROR_OK {
- ackMsg := &serverproto.SCActivitiesFirstChargeRewardAck{
- Error: int32(ret),
- }
- this.ReplayGate(ackMsg, true)
- }
- }
- func (this *Role) ActivitiesLikability(activityId int32, itemId, likabilityLevel int32) {
- if this.roleActivity == nil {
- return
- }
- ret := this.roleActivity.ActivitiesLikability(activityId, itemId, likabilityLevel)
- if ret != serverproto.ErrorCode_ERROR_OK {
- ackMsg := &serverproto.SCActivitiesLikabilityRewardAck{
- Error: int32(ret),
- }
- this.ReplayGate(ackMsg, true)
- }
- }
- // 活动转盘
- func (this *Role) ActivityWheelRefresh(activityId int32) {
- if this.roleActivity == nil {
- return
- }
- ret := this.roleActivity.ActivityWheelRefresh(activityId)
- ackMsg := &serverproto.SCActivityWheelRefreshAck{
- Error: int32(ret),
- }
- this.ReplayGate(ackMsg, true)
- }
- func (this *Role) ActivityWheelOpenReward(activityId int32) {
- if this.roleActivity == nil {
- return
- }
- ret := this.roleActivity.ActivityWheelOpen(activityId)
- ackMsg := &serverproto.SCActivityWheelOpenRewardAck{
- Error: int32(ret),
- }
- this.ReplayGate(ackMsg, true)
- }
- func (this *Role) ActivityWheelReward(activityId int32, rewardAll bool) {
- if this.roleActivity == nil {
- return
- }
- ret := this.roleActivity.ActivityWheelReward(activityId, rewardAll)
- if ret != serverproto.ErrorCode_ERROR_OK {
- ackMsg := &serverproto.SCActivityWheelRewardAck{
- Error: int32(ret),
- RewardAll: rewardAll,
- }
- this.ReplayGate(ackMsg, true)
- }
- }
- func (this *Role) ActivityWheelClose(activityId int32) {
- if this.roleActivity == nil {
- return
- }
- ret := this.roleActivity.ActivityWheelClose(activityId)
- ackMsg := &serverproto.SCActivityWheelCloseRewardAck{
- Error: int32(ret),
- }
- this.ReplayGate(ackMsg, true)
- }
- // 活动召唤
- func (this *Role) ActivitySummon(activityId, summonCount int32) {
- if this.roleActivity == nil {
- return
- }
- ret := this.roleActivity.ActivitySummon(activityId, summonCount)
- if ret != serverproto.ErrorCode_ERROR_OK {
- ackMsg := &serverproto.SCActivitySummonAck{
- Error: int32(ret),
- }
- this.ReplayGate(ackMsg, true)
- }
- }
- // 活动签到
- func (this *Role) ActivitySignIn(activityId int32) {
- if this.roleActivity == nil {
- return
- }
- ackMsg := &serverproto.SCActivitySignInAck{
- ActivityId: activityId,
- }
- ret := this.roleActivity.ActivitySignIn(activityId, ackMsg)
- ackMsg.Error = int32(ret)
- this.ReplayGate(ackMsg, true)
- }
- // 砸蛋活动
- // drawType(蛋种类)
- func (this *Role) ActivitySmashEggs(activityId, drawType, drawCount int32) {
- if this.roleActivity == nil {
- return
- }
- ret := this.roleActivity.ActivitySmashEggs(activityId, drawType, drawCount)
- if ret != serverproto.ErrorCode_ERROR_OK {
- ackMsg := &serverproto.SCActivitySmashEggsAck{
- Error: int32(ret),
- }
- this.ReplayGate(ackMsg, true)
- }
- }
- func (this *Role) ActivitySmashEggsMsg(activityId, drawType int32) {
- if this.roleActivity == nil {
- return
- }
- this.roleActivity.ActivitySmashEggsMsg(activityId, drawType)
- }
- // 活动逻辑模块
- type RoleActivityOuter interface {
- GetSignUpInfo()
- OnSignUp()
- }
- type RoleActivity struct {
- SaveObject
- signInfo *serverproto.SignUp
- ////精彩活动
- //updateTimer util.DurationTimer
- curDayEndTime uint64
- //连续登录活动 | 14日目标任务
- activityDataList map[int32]*serverproto.ActivitiesDetailData
- activitiesTaskList map[int32]map[uint32]*serverproto.TaskData
- //根据枚举类型对任务做区分[ActivitiesId][[serverproto.TaskType, taslidlist]]
- taskTypeList map[int32]map[int32]set.Interface
- initTaskType bool
- changeTaskList map[int32]set.Interface //uint32
- openActivitiesList []int32 //已经开启的精彩活动(相对玩家创建角色时间)
- registerDayTime time.Time
- delActivityList set.Interface //int32 save过程使用
- hasDelActivityList []int32 //删除的活动(过期或者其他原因导致活动已经删除,并记录次数)
- //充值相关
- //首充数据
- firstChargeTime uint64
- firstChargeRewardStat int32
- superUnlockChargeList []*serverproto.ActivitiesUnlockRechargeData //超值礼包数据
- unlockChargeHasList map[int32]*serverproto.KeyValueType //ProductID
- //集字活动
- }
- func newRoleActivity(r *Role) *RoleActivity {
- roleActivity := &RoleActivity{
- SaveObject: SaveObject{
- role: r,
- },
- changeTaskList: map[int32]set.Interface{},
- delActivityList: set.New(set.NonThreadSafe),
- taskTypeList: map[int32]map[int32]set.Interface{},
- activityDataList: map[int32]*serverproto.ActivitiesDetailData{},
- activitiesTaskList: map[int32]map[uint32]*serverproto.TaskData{},
- unlockChargeHasList: map[int32]*serverproto.KeyValueType{},
- }
- roleActivity.signInfo = &serverproto.SignUp{
- SignRound: 1,
- CurDay: 0,
- CurSignInfo: &serverproto.CurRoundSign{
- LastSign: 0,
- },
- }
- return roleActivity
- }
- func (this *RoleActivity) Load(msg interface{}) bool {
- proRole := msg.(*serverproto.Role)
- if proRole.RoleActivity != nil {
- if proRole.RoleActivity.SignInfo != nil {
- this.signInfo = proRole.RoleActivity.SignInfo
- }
- if len(ActivitiesMag.SmashEggsMsgList) <= 0 {
- ActivitiesMag.SmashEggsMsgList = proRole.RoleActivity.ActMsgList
- }
- //充值
- this.firstChargeTime = proRole.RoleActivity.FirstChargeTime
- this.firstChargeRewardStat = proRole.RoleActivity.FirstChargeRewardState
- this.superUnlockChargeList = proRole.RoleActivity.UnlockChargeList
- this.hasDelActivityList = proRole.RoleActivity.ExpiredActivityList
- for idx := 0; idx < len(proRole.RoleActivity.UnlockChargeHasList); idx++ {
- tmpVal := proRole.RoleActivity.UnlockChargeHasList[idx]
- this.unlockChargeHasList[tmpVal.Key] = tmpVal
- }
- nowTime := util.GetTimeMilliseconds()
- //限时礼包过期时间处理
- if this.refreshDiscountData(nowTime) {
- this.SetDirty(true)
- }
- ////精彩活动 activities
- //当前天结束时间戳
- this.curDayEndTime = util.GetLatest5Hour()
- for idx := 0; idx < len(proRole.RoleActivity.ActivityDataList); idx++ {
- tmpData := proRole.RoleActivity.ActivityDataList[idx]
- this.activityDataList[tmpData.ActivitiesId] = tmpData
- }
- for _, tmpData := range this.activityDataList {
- convertData, ok := model.ConvertActivitiesList[tmpData.ActivitiesId]
- if !ok {
- this.delActivityList.Add(tmpData.ActivitiesId)
- delete(this.activityDataList, tmpData.ActivitiesId)
- this.addHasDelActivityList(tmpData.ActivitiesId, "Load convertData not find")
- this.SetDirty(true)
- continue
- }
- if convertData.ActivityType == int32(serverproto.EActivityType_EActivityType_Likability) {
- if tmpData.LikabilityData == nil {
- tmpData.LikabilityData = &serverproto.ActivitiesLikabilityData{
- Level: 1,
- }
- }
- }
- //初始化任务列表
- if tmpData.FortnightDays != nil {
- tmpTaskList, ok := this.activitiesTaskList[tmpData.ActivitiesId]
- if !ok {
- tmpTaskList = map[uint32]*serverproto.TaskData{}
- this.activitiesTaskList[tmpData.ActivitiesId] = tmpTaskList
- }
- for idx := 0; idx < len(tmpData.FortnightDays.TaskList); idx++ {
- tmpTask := tmpData.FortnightDays.TaskList[idx]
- _, ok := model.ConvertActivitiesTaskList[int32(tmpTask.TaskId)]
- if !ok {
- continue
- }
- tmpTaskList[tmpTask.TaskId] = tmpTask
- }
- }
- //初始化国王悬赏任务列表
- if len(tmpData.KingTask) > 0 {
- tmpTaskList, ok := this.activitiesTaskList[tmpData.ActivitiesId]
- if !ok {
- tmpTaskList = map[uint32]*serverproto.TaskData{}
- this.activitiesTaskList[tmpData.ActivitiesId] = tmpTaskList
- }
- for idx := 0; idx < len(tmpData.KingTask); idx++ {
- tmpTask := tmpData.KingTask[idx]
- _, ok := model.ConvertActivitiesTaskList[int32(tmpTask.TaskId)]
- if !ok {
- continue
- }
- tmpTaskList[tmpTask.TaskId] = tmpTask
- }
- }
- //BT任务列表
- if len(tmpData.BtZhenjiaRechargeTaskList) > 0 {
- this.loadActivityTaskData(tmpData.ActivitiesId, tmpData.BtZhenjiaRechargeTaskList)
- }
- if tmpData.BtRocoinData != nil {
- this.loadActivityTaskData(tmpData.ActivitiesId, tmpData.BtRocoinData.DailyTaskList)
- this.loadActivityTaskData(tmpData.ActivitiesId, tmpData.BtRocoinData.WeekTaskList)
- }
- //特殊处理嘉年华活动时间bug, 使用活动类型判断
- if tmpData.ActivitiesType == int32(serverproto.EActivityType_EActivityType_Acitivty_Shop) {
- tmpData.StartTime = uint64(convertData.CalStartTime.UnixNano() / 1e6)
- tmpData.EndTime = convertData.CalEndTimeMs
- } else if tmpData.ActivitiesType == int32(serverproto.EActivityType_EActivityType_Daily_Cum_Recharge) {
- // 特殊处理 每日充值类型的活动! 开始时间改为服务器启动时间
- tmpData.StartTime = service.GetServiceStartupTime()
- }
- //判断活动过期
- if convertData.TimeType > 0 && tmpData.EndTime <= nowTime && tmpData.EndTime > 0 {
- //领取活动奖励
- this.getAllActivityReward(tmpData)
- this.delActivityList.Add(tmpData.ActivitiesId)
- delete(this.activityDataList, tmpData.ActivitiesId)
- this.addHasDelActivityList(tmpData.ActivitiesId, "Load Time Invalid")
- this.SetDirty(true)
- continue
- }
- util.DebugF("uid=%v OpenNewActivities ok[init] activity id=%v endtime=%v", this.role.GetUUid(), convertData.Id, tmpData.EndTime)
- }
- //判断是否开启新活动
- for _, convertData := range ActivitiesMag.OpenedList {
- this.OpenNewActivities(convertData, nowTime, false)
- }
- //相对创建角色时间
- for _, convertData := range ActivitiesMag.RoleActivitiesList {
- this.OpenNewActivities(convertData, nowTime, false)
- }
- //根据玩家开启系统决定活动开启时间
- for _, convertData := range ActivitiesMag.RoleSystemActList {
- this.OpenNewActivities(convertData, nowTime, false)
- }
- //过期后的活动是否强制开启(之前没有开启过,只针对相对开服时间开启的活动类型,立即开启)
- for _, convertData := range ActivitiesMag.ExpiredActivitiesList {
- this.OpenNewActivities(convertData, nowTime, false)
- }
- }
- return true
- }
- // load时初始化任务类型数据
- func (this *RoleActivity) loadActivityTaskData(activityId int32, taskDataList []*serverproto.TaskData) {
- if len(taskDataList) <= 0 {
- return
- }
- tmpTaskList, ok := this.activitiesTaskList[activityId]
- if !ok {
- tmpTaskList = map[uint32]*serverproto.TaskData{}
- this.activitiesTaskList[activityId] = tmpTaskList
- }
- for idx := 0; idx < len(taskDataList); idx++ {
- tmpTask := taskDataList[idx]
- _, ok := model.ConvertActivitiesTaskList[int32(tmpTask.TaskId)]
- if !ok {
- continue
- }
- tmpTaskList[tmpTask.TaskId] = tmpTask
- }
- }
- func (this *RoleActivity) addHasDelActivityList(activityId int32, param string) {
- for idx := 0; idx < len(this.hasDelActivityList); idx++ {
- if this.hasDelActivityList[idx] == activityId {
- return
- }
- }
- util.InfoF("uid=%v addHasDelActivityList activityId=%v param=%v", this.role.GetUUid(), activityId, param)
- this.hasDelActivityList = append(this.hasDelActivityList, activityId)
- this.SetDirty(true)
- }
- func (this *RoleActivity) hasDelActivityByID(activityId int32) bool {
- //判断是否已经开启过该活动
- for idx := 0; idx < len(this.hasDelActivityList); idx++ {
- if this.hasDelActivityList[idx] == activityId {
- return true
- }
- }
- return false
- }
- func (this *RoleActivity) Save() {
- this.SetDirty(false)
- //util.DebugF("uid=%v RoleActivity save...", this.role.GetUUid())
- //base
- saveMsg := &serverproto.SSActivityDataSaveReq{
- RoleActivity: &serverproto.RoleActivity{
- SignInfo: this.signInfo,
- FirstChargeTime: this.firstChargeTime,
- FirstChargeRewardState: this.firstChargeRewardStat,
- UnlockChargeList: this.superUnlockChargeList,
- },
- }
- for _, val := range this.unlockChargeHasList {
- saveMsg.RoleActivity.UnlockChargeHasList = append(saveMsg.RoleActivity.UnlockChargeHasList, val)
- }
- //change task | del task
- for actId, taskList := range this.changeTaskList {
- if this.delActivityList.Has(actId) {
- continue
- }
- activityInfo := this.getActivityData(actId)
- if activityInfo == nil {
- this.delActivityList.Add(actId)
- this.addHasDelActivityList(actId, "Save")
- continue
- }
- saveDetail := &serverproto.ActivityDataSaveDetail{
- ActivitiesId: actId,
- }
- for {
- if taskList.Size() <= 0 {
- break
- }
- taskId := taskList.Pop().(uint32)
- //活动本身数据
- if taskId == 0 {
- saveDetail.ActivityData = &serverproto.ActivitiesDetailData{
- ActivitiesId: activityInfo.ActivitiesId,
- ActivitiesType: activityInfo.ActivitiesType,
- StartTime: activityInfo.StartTime,
- EndTime: activityInfo.EndTime,
- CurDay: activityInfo.CurDay,
- LoginRewardList: activityInfo.LoginRewardList,
- ParamTime: activityInfo.ParamTime,
- RewardState: activityInfo.RewardState,
- CollectionList: activityInfo.CollectionList,
- //FightingTarget: activityInfo.FightingTarget,
- ExchangeList: activityInfo.ExchangeList,
- //BtZhenjiaRechargeTaskList: activityInfo.BtZhenjiaRechargeTaskList,
- }
- if activityInfo.FortnightDays != nil {
- saveDetail.ActivityData.FortnightDays = &serverproto.ActivitiesFortnightDays{
- TaskScore: activityInfo.FortnightDays.TaskScore,
- TaskScoreReward: activityInfo.FortnightDays.TaskScoreReward,
- }
- }
- if activityInfo.WheelData != nil {
- saveDetail.ActivityData.WheelData = activityInfo.WheelData
- }
- if activityInfo.SignData != nil {
- saveDetail.ActivityData.SignData = activityInfo.SignData
- }
- if activityInfo.LikabilityData != nil {
- saveDetail.ActivityData.LikabilityData = activityInfo.LikabilityData
- }
- if activityInfo.BtRocoinData != nil {
- saveDetail.ActivityData.BtRocoinData = &serverproto.ActivityBTROCoin{
- WeekDayEndTime: activityInfo.BtRocoinData.WeekDayEndTime,
- }
- }
- } else {
- taskInfo := this.getTaskData(actId, taskId)
- if taskInfo == nil {
- saveDetail.DelTaskList = append(saveDetail.DelTaskList, taskId)
- } else {
- saveDetail.ChangeTaskList = append(saveDetail.ChangeTaskList, taskInfo)
- }
- }
- }
- saveMsg.ChangeActivityList = append(saveMsg.ChangeActivityList, saveDetail)
- }
- //del activity
- for {
- if this.delActivityList.Size() <= 0 {
- break
- }
- val := this.delActivityList.Pop()
- saveMsg.DelActivityList = append(saveMsg.DelActivityList, val.(int32))
- }
- saveMsg.RoleActivity.ExpiredActivityList = this.hasDelActivityList
- this.role.SendDb(saveMsg)
- }
- func (this *RoleActivity) ActivityHDRuneGoodsAdd(activityId int32) uint64 {
- for _, val := range this.activityDataList {
- if cfgData, ok := model.ConvertActivitiesList[val.ActivitiesId]; ok {
- if cfgData.Id == activityId {
- return val.EndTime
- }
- }
- }
- return 0
- }
- // 活动道具掉落
- func (this *RoleActivity) ActivityHDItemCheck(configId int32, cfgItemData *serverproto.ItemCfg) int32 {
- for _, val := range this.activityDataList {
- if cfgData, ok := model.ConvertActivitiesList[val.ActivitiesId]; ok {
- if cfgData.HDItemList.Has(configId) {
- if cfgItemData.ItemTime == Item_Time_Type_Likability {
- //特殊标记表示无结束时间
- return -1
- } else {
- return int32(val.EndTime / 1000)
- }
- }
- }
- }
- return 0
- }
- // 检查是否需要切换循环
- func (this *RoleActivity) CheckNewCircle() bool {
- //判定是否是同一轮大循环
- if this.signInfo.SignRound == 0 {
- this.signInfo.SignRound = 1
- this.SetDirty(true)
- return false
- }
- globalCfg, ok := serverproto.GlobalCfgLoader[int32(serverproto.GlobalType_Global_SignUp_Version)]
- if !ok {
- util.InfoF("uid=%v signup version not found", this.role.GetUUid())
- return false
- }
- //同一轮大循环
- if this.signInfo.SignRound == globalCfg.IVal {
- return false
- }
- //重置所有数据
- this.signInfo.SignRound = globalCfg.IVal
- this.signInfo.CurDay = 0
- this.signInfo.CurSignInfo.LastSign = 0
- this.SetDirty(true)
- return true
- }
- // 检查是否新的周期
- func (this *RoleActivity) ChangeSignUpInfo() bool {
- //重置小周期数据
- var nextBeginDay int32
- nextBegin := this.signInfo.CurDay + 1
- _, ok := model.ConvertSignUpData[nextBegin]
- if !ok {
- nextBegin = this.signInfo.CurDay - 30 + 1
- _, ok2 := model.ConvertSignUpData[nextBegin]
- if !ok2 {
- util.ErrorF("uid=%vConvertSignUpData config error. nextBegin:%v", this.role.GetUUid(), nextBegin)
- return false
- } else {
- nextBeginDay = nextBegin
- }
- } else {
- nextBeginDay = nextBegin
- }
- this.signInfo.CurDay = nextBeginDay
- return true
- }
- // 请求签到
- func (this *RoleActivity) SignUp(ackMsg *serverproto.SCSignUpAck) serverproto.ErrorCode {
- //今日是否签到
- if this.signInfo.CurSignInfo.LastSign != 0 && this.signInfo.CurSignInfo.LastSign > int64(util.GetCurrentTime()) {
- return serverproto.ErrorCode_ERROR_ACTIVITY_SIGNUP_REPEATEAD
- }
- //签到//累积签到//找不到下一个可签到的天,不让他今天签到
- bRet := this.ChangeSignUpInfo()
- if bRet == false {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- this.signInfo.CurSignInfo.LastSign = int64(util.GetLatest5Hour())
- data, ok := model.ConvertSignUpData[this.signInfo.CurDay]
- if ok {
- var addItemList = map[int32]int32{}
- if len(data.DaySign) > 0 {
- for _, data := range data.DaySign {
- if !CheckHDItemAdd(data.Key, this.role) {
- continue
- }
- addItemList[data.Key] += data.Value
- ackMsg.DayList = append(ackMsg.DayList, &serverproto.KeyValueType{
- Key: data.Key,
- Value: data.Value,
- })
- }
- }
- if len(data.AccuSign) > 0 {
- for _, data := range data.AccuSign {
- if !CheckHDItemAdd(data.Key, this.role) {
- continue
- }
- addItemList[data.Key] += data.Value
- ackMsg.AccuList = append(ackMsg.AccuList, &serverproto.KeyValueType{
- Key: data.Key,
- Value: data.Value,
- })
- }
- }
- if data.VipLevel != 0 && this.role.GetRoleBase().roleBase.VipLevel >= data.VipLevel {
- vipRate := this.role.GetRoleBase().GetVipData(model.Vip_System_SignReward)
- if vipRate > 1 && len(data.DaySign) > 0 {
- for _, data := range data.DaySign {
- if !CheckHDItemAdd(data.Key, this.role) {
- continue
- }
- addItemList[data.Key] += data.Value
- ackMsg.DoubleList = append(ackMsg.DoubleList, &serverproto.KeyValueType{
- Key: data.Key,
- Value: data.Value * (vipRate - 1),
- })
- }
- }
- }
- this.role.AddItemList(addItemList, AddFrom_SignUp, true)
- }
- this.SetDirty(true)
- //if this.signInfo.CurDay == 2 {
- // ntf := &serverproto.SCDnySdkNtf{Type: 22}
- // this.role.ReplayGate(ntf, true)
- //} else if this.signInfo.CurDay == 3 {
- // ntf := &serverproto.SCDnySdkNtf{Type: 23}
- // this.role.ReplayGate(ntf, true)
- //} else if this.signInfo.CurDay == 8 {
- // ntf := &serverproto.SCDnySdkNtf{Type: 24}
- // this.role.ReplayGate(ntf, true)
- //} else if this.signInfo.CurDay == 30 {
- // ntf := &serverproto.SCDnySdkNtf{Type: 25}
- // this.role.ReplayGate(ntf, true)
- //}
- return serverproto.ErrorCode_ERROR_OK
- }
- // 获得下一次签到天
- func (this *RoleActivity) GetCurSignDay() int32 {
- nextBegin := this.signInfo.CurDay + 1
- _, ok := model.ConvertSignUpData[nextBegin]
- if !ok {
- nextBegin = this.signInfo.CurDay - 30 + 1
- _, ok2 := model.ConvertSignUpData[nextBegin]
- if !ok2 { //一般不会有问题。都是从这天走过来的。除非策划乱搞表。
- util.ErrorF("uid=%v ConvertSignUpData config error nextbegin=%v", this.role.GetUUid(), nextBegin)
- return 0
- }
- }
- return nextBegin
- }
- // gm命令
- func (this *RoleActivity) SetSignDay(day int32, sec int32) {
- if this.signInfo != nil {
- this.signInfo.CurDay = day
- if sec != -1 {
- this.signInfo.CurSignInfo.LastSign = int64(sec)
- }
- this.SetDirty(true)
- }
- }
- // //精彩活动
- func (this *RoleActivity) DailyReset(notify bool) {
- nowTime := util.GetTimeMilliseconds()
- this.curDayEndTime = util.GetLatest5Hour()
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- //判断是否开启新活动
- addActivityNtfMsg := &serverproto.SCActivitiesOpenListNtf{}
- for _, convertData := range ActivitiesMag.OpenedList {
- ret, detailInfo := this.OpenNewActivities(convertData, nowTime, notify)
- if ret {
- tmpData := &serverproto.ActivitiesData{
- Id: convertData.Id,
- Type: convertData.ActivityType,
- Bg: convertData.BG,
- EndTime: detailInfo.EndTime,
- }
- addActivityNtfMsg.ActivityList = append(addActivityNtfMsg.ActivityList, tmpData)
- }
- }
- //相对创建角色时间
- for _, convertData := range ActivitiesMag.RoleActivitiesList {
- ret, detailInfo := this.OpenNewActivities(convertData, nowTime, notify)
- if ret {
- tmpData := &serverproto.ActivitiesData{
- Id: convertData.Id,
- Type: convertData.ActivityType,
- Bg: convertData.BG,
- EndTime: detailInfo.EndTime,
- }
- addActivityNtfMsg.ActivityList = append(addActivityNtfMsg.ActivityList, tmpData)
- }
- }
- for _, val := range this.activityDataList {
- //跨天 跨周后活动是否过期,需要获取奖励(这边处理在线,离线上线时已经处理)
- if val.EndTime > 0 && nowTime >= val.EndTime {
- this.getAllActivityReward(val)
- this.delActivityList.Add(val.ActivitiesId)
- delete(this.activityDataList, val.ActivitiesId)
- this.addHasDelActivityList(val.ActivitiesId, "DailyReset")
- this.SetDirty(true)
- continue
- }
- if val.StartTime > nowTime || val.StartTime <= 0 {
- continue
- }
- tmpCurDay := util.GetDurationDay2(val.StartTime, nowTime)
- //util.ErrorF("uid=%v DailyReset activityId=%v oldCurDay=%v tmpCurDay=%v", this.role.GetUUid(), val.ActivitiesId, val.CurDay, tmpCurDay)
- switch val.ActivitiesType {
- case int32(serverproto.EActivityType_EActivityType_14_Days_Login): //14日登陆活动
- if val.CurDay < tmpCurDay {
- val.CurDay = tmpCurDay
- val.LoginRewardList = append(val.LoginRewardList, &serverproto.KeyValueType{Key: tmpCurDay})
- this.SetDirty(true)
- }
- case int32(serverproto.EActivityType_EActivityType_14_Days_Task): //14日任务
- sIdx := val.CurDay + 1
- eIdx := tmpCurDay
- ////跨周任务奖励获取
- //oldCurWeek := this.getWeekNumber(val.CurDay)
- //tmpCurWeek := this.getWeekNumber(tmpCurDay)
- //if tmpCurWeek > oldCurWeek {
- // //this.getAllActivityReward(val)
- // sIdx = tmpCurWeek*7 - 6
- //}
- // 跨天添加新任务处理
- for idx := sIdx; idx <= eIdx; idx++ {
- dayVal, ok := model.ConvertActivitiesFortnightDaysList[idx]
- if !ok {
- continue
- }
- for k := 0; k < len(dayVal.TaskList); k++ {
- this.addDayTask(val.ActivitiesId, dayVal.TaskList[k],
- dayVal.Days, false, idx)
- }
- for k := 0; k < len(dayVal.DailyTaskList); k++ {
- this.addDayTask(val.ActivitiesId, dayVal.DailyTaskList[k],
- dayVal.Days, true, idx)
- }
- }
- val.CurDay = tmpCurDay
- this.SetDirty(true)
- case int32(serverproto.EActivityType_EActivityType_Daily_Cum_Recharge): //每日累计充值
- //未领取的奖励隔天重置时通过邮件发送
- this.getAllActivityReward(val)
- val.CurDay = tmpCurDay
- val.RewardState = 0
- this.SetDirty(true)
- case int32(serverproto.EActivityType_EActivityType_King):
- this.getAllActivityKingTaskReward(val, model.TASK_TYPE_TODAY)
- this.ResetTodayTask(val, nowTime)
- case int32(serverproto.EActivityType_EActivityType_Pet_Exchange):
- if val.CurDay < tmpCurDay {
- val.CurDay = tmpCurDay
- if len(val.ExchangeList) <= 0 {
- continue
- }
- cfgData, ok := model.ConvertExchangeReset[val.ActivitiesId]
- if !ok || len(cfgData.Id) <= 0 {
- continue
- }
- for _, idx := range cfgData.Id {
- for i := 0; i < len(val.ExchangeList); i++ {
- if idx == val.ExchangeList[i].Id {
- val.ExchangeList[i].ExchangeNum = 0
- break
- }
- }
- }
- this.SetDirty(true)
- }
- case int32(serverproto.EActivityType_EActivityType_BT_ROCoinRecharge):
- fallthrough
- case int32(serverproto.EActivityType_EActivityType_BT_ZhenJiaRecharge):
- //未领取的奖励隔天重置时通过邮件发送
- this.getAllActivityReward(val)
- val.CurDay = tmpCurDay
- this.resetBTTasks(val)
- this.SetDirty(true)
- default:
- val.CurDay = tmpCurDay
- this.SetDirty(true)
- }
- this.addChangeActivity(val.ActivitiesId, 0)
- if notify {
- tmpDetailData := &serverproto.ActivitiesDetailData{}
- this.copyActivityDetailData(val, tmpDetailData)
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, tmpDetailData)
- }
- }
- if notify {
- if len(ntfMsg.ActivityDataList) > 0 {
- this.role.ReplayGate(ntfMsg, true)
- }
- if len(addActivityNtfMsg.ActivityList) > 0 {
- this.role.ReplayGate(addActivityNtfMsg, true)
- }
- }
- util.ErrorF("reset activity notify=%v")
- this.SuperChargeUnlockCheck(serverproto.UnlockChargeType_UChargeType_DailyGift, &SuperChargeUnlockST{oldValue: 0})
- }
- func (this *RoleActivity) StartupNtf() {
- for key, val := range this.activityDataList {
- if cfgData, ok := model.ConvertActivitiesList[val.ActivitiesId]; ok {
- if cfgData.CalEndTimeMs == 0 {
- // 重新计算开始时间和结束时间
- StartTime, EndTime := this.recalActivityTime(cfgData)
- this.activityDataList[key].StartTime = StartTime
- this.activityDataList[key].EndTime = EndTime
- } else {
- this.activityDataList[key].StartTime = uint64(cfgData.CalStartTime.UnixMilli())
- this.activityDataList[key].EndTime = uint64(cfgData.CalEndTime.UnixMilli())
- }
- }
- }
- ntfMsg := &serverproto.SCActivitiesStartupNtf{
- CurDayEndTime: this.curDayEndTime,
- FirstChargeTime: this.firstChargeTime,
- FirstChargeRewardState: this.firstChargeRewardStat,
- UnlockChargeList: this.superUnlockChargeList,
- }
- for _, val := range this.activityDataList {
- tmpDetailData := &serverproto.ActivitiesDetailData{}
- this.copyActivityDetailData(val, tmpDetailData)
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, tmpDetailData)
- openData := &serverproto.ActivitiesData{
- Id: val.ActivitiesId,
- Type: val.ActivitiesType,
- EndTime: val.EndTime,
- }
- cfgData, ok := model.ConvertActivitiesList[val.ActivitiesId]
- if ok {
- openData.Bg = cfgData.BG
- }
- ntfMsg.OpenActivityList = append(ntfMsg.OpenActivityList, openData)
- }
- //util.DebugF("uid=%v StartupNtf msg=%v", this.role.GetUUid(), ntfMsg)
- this.role.ReplayGate(ntfMsg, true)
- }
- func (this *RoleActivity) recalActivityTime(convertData *model.ConvertActivitiesData) (uint64, uint64) {
- if this.registerDayTime.IsZero() {
- this.registerDayTime = util.GetDayByTimeStr2(this.role.RegisterTime)
- }
- tmpSTime1 := util.GetTimeByUint64(this.role.RegisterTime)
- if convertData.StartDay >= 1 {
- tmpSTime1 = tmpSTime1.AddDate(0, 0, convertData.StartDay-1)
- }
- //根据当前时间是否是5点之前确定是否是第一天
- //根据创建角色时间endday-startday + 1(持续时间)
- endDay := convertData.EndDay
- if tmpSTime1.Hour() < 5 {
- endDay -= 1
- }
- //tempSTime := util.GetTimeByStr(tmpSTime1.Format(util.DATE_FORMAT1) + " " + convertData.StartTimeStr) //开始时间
- tempSTime := tmpSTime1
- tmpSTime2 := this.registerDayTime
- if convertData.EndDay >= 1 {
- tmpSTime2 = tmpSTime2.AddDate(0, 0, endDay)
- }
- tempETime := util.GetTimeByStr(tmpSTime2.Format(util.DATE_FORMAT1) + " " + convertData.EndTimeStr) //结束时间
- StartTime := uint64(tempSTime.UnixNano() / 1e6)
- EndTime := uint64(tempETime.UnixNano() / 1e6)
- util.InfoF("StartTime:%v EndTime:%v", StartTime, EndTime)
- return StartTime, EndTime
- }
- func (this *RoleActivity) copyActivityDetailData(src, dst *serverproto.ActivitiesDetailData) {
- dst.ActivitiesId = src.ActivitiesId
- dst.ActivitiesType = src.ActivitiesType
- dst.StartTime = src.StartTime
- dst.EndTime = src.EndTime
- dst.CurDay = src.CurDay
- dst.LoginRewardList = src.LoginRewardList
- dst.ParamTime = src.ParamTime
- dst.RewardState = src.RewardState
- dst.CollectionList = src.CollectionList
- dst.ExchangeList = src.ExchangeList
- dst.KingTask = src.KingTask
- dst.SignData = src.SignData
- //if src.FightingTarget <= 0 {
- // roleBase := this.role.GetRoleBase()
- // if roleBase != nil && roleBase.RoleData() != nil{
- // src.FightingTarget = roleBase.RoleData().FightPower
- // }
- //}
- //dst.FightingTarget = src.FightingTarget
- if src.FortnightDays != nil {
- dst.FortnightDays = &serverproto.ActivitiesFortnightDays{}
- dst.FortnightDays.TaskScore = src.FortnightDays.TaskScore
- dst.FortnightDays.TaskScoreReward = src.FortnightDays.TaskScoreReward
- }
- if src.WheelData != nil {
- dst.WheelData = src.WheelData
- }
- //任务数据
- if src.ActivitiesType == int32(serverproto.EActivityType_EActivityType_14_Days_Task) {
- tmpTaskList, ok := this.activitiesTaskList[src.ActivitiesId]
- if ok {
- if dst.FortnightDays == nil {
- dst.FortnightDays = &serverproto.ActivitiesFortnightDays{}
- }
- for _, tmpTask := range tmpTaskList {
- dst.FortnightDays.TaskList = append(dst.FortnightDays.TaskList, tmpTask)
- }
- }
- }
- dst.LikabilityData = src.LikabilityData
- // bt
- dst.BtRocoinData = src.BtRocoinData
- dst.BtZhenjiaRechargeTaskList = src.BtZhenjiaRechargeTaskList
- }
- // 开启新活动
- func (this *RoleActivity) OpenNewActivities(convertData *model.ConvertActivitiesData, ms uint64, notify bool) (bool, *serverproto.ActivitiesDetailData) {
- tmpActivityData, bFind := this.activityDataList[convertData.Id]
- if bFind {
- util.DebugF("uid=%v OpenNewActivities failed has activity id=%v", this.role.GetUUid(), convertData.Id)
- return false, nil
- }
- //判断是否超过最后开启时间的活动
- if convertData.TerminalOpenTimeMs > 0 && ms >= convertData.TerminalOpenTimeMs {
- return false, nil
- }
- //开启活动
- tmpActivityData = &serverproto.ActivitiesDetailData{
- ActivitiesId: convertData.Id,
- ActivitiesType: convertData.ActivityType,
- }
- //根据角色创建时间
- if convertData.TimeType == model.ActivitiesTime_Type_Role {
- if this.registerDayTime.IsZero() {
- this.registerDayTime = util.GetDayByTimeStr2(this.role.RegisterTime)
- }
- //tmpSTime1 := this.registerDayTime
- tmpSTime1 := util.GetTimeByUint64(this.role.RegisterTime)
- if convertData.StartDay >= 1 {
- tmpSTime1 = tmpSTime1.AddDate(0, 0, convertData.StartDay-1)
- }
- //根据当前时间是否是5点之前确定是否是第一天
- //根据创建角色时间endday-startday + 1(持续时间)
- endDay := convertData.EndDay
- if tmpSTime1.Hour() < 5 {
- endDay -= 1
- }
- //tempSTime := util.GetTimeByStr(tmpSTime1.Format(util.DATE_FORMAT1) + " " + convertData.StartTimeStr) //开始时间
- tempSTime := tmpSTime1
- tmpSTime2 := this.registerDayTime
- if convertData.EndDay >= 1 {
- tmpSTime2 = tmpSTime2.AddDate(0, 0, endDay)
- }
- tempETime := util.GetTimeByStr(tmpSTime2.Format(util.DATE_FORMAT1) + " " + convertData.EndTimeStr) //结束时间
- tmpActivityData.StartTime = uint64(tempSTime.UnixNano() / 1e6)
- tmpActivityData.EndTime = uint64(tempETime.UnixNano() / 1e6)
- } else if convertData.TimeType == model.ActivitiesTime_Type_System {
- //判断开启条件是否成立,并且是否有相同类型活动(相同移除之前的活动)
- if !this.checkOpenNewActivitiesCondition(convertData) {
- util.InfoF("uid=%v OpenNewActivities failed activity end id=%v levelid=%v", this.role.GetUUid(), convertData.Id,
- this.role.GetRoleBattle().GetLevelId())
- return false, nil
- }
- tmpActivityData.StartTime = util.GetTimeMilliseconds()
- } else if convertData.TimeType == model.ActivitiesTime_Type_Server && convertData.ExpiredActivities {
- //过期后的活动是否强制开启(之前没有开启过,只针对相对开服时间开启的活动类型,立即开启)
- //判断是否已经开启过该活动
- if this.hasDelActivityByID(convertData.Id) {
- util.DebugF("uid=%v OpenNewActivities failed has opened activity id=%v", this.role.GetUUid(), convertData.Id)
- return false, nil
- }
- nowTime := util.GetTimeByUint64(ms)
- tmpSTime1 := nowTime
- tempSTime := tmpSTime1
- tmpSTime2 := nowTime
- if convertData.EndDay >= 1 {
- tmpSTime2 = tmpSTime2.AddDate(0, 0, convertData.EndDay-convertData.StartDay)
- }
- tempETime := util.GetTimeByStr(tmpSTime2.Format(util.DATE_FORMAT1) + " " + convertData.EndTimeStr) //结束时间
- tmpActivityData.StartTime = uint64(tempSTime.UnixNano() / 1e6)
- tmpActivityData.EndTime = uint64(tempETime.UnixNano() / 1e6)
- } else {
- if convertData.CalEndTimeMs > 0 {
- tmpActivityData.StartTime = uint64(convertData.CalStartTime.UnixNano() / 1e6)
- tmpActivityData.EndTime = convertData.CalEndTimeMs
- } else {
- if tmpActivityData.ActivitiesType == int32(serverproto.EActivityType_EActivityType_Daily_Cum_Recharge) {
- tmpActivityData.StartTime = service.GetServiceStartupTime()
- } else {
- //永久开放活动
- tmpActivityData.StartTime = util.GetTimeMilliseconds()
- }
- }
- }
- if tmpActivityData.EndTime > 0 && (ms >= tmpActivityData.EndTime || ms < tmpActivityData.StartTime) {
- util.DebugF("uid=%v OpenNewActivities failed activity end id=%v", this.role.GetUUid(), convertData.Id)
- return false, nil
- }
- switch convertData.ActivityType {
- //14日目标任务
- case int32(serverproto.EActivityType_EActivityType_14_Days_Task):
- this.open14DaysTask(tmpActivityData, convertData)
- //14日登陆奖励
- case int32(serverproto.EActivityType_EActivityType_14_Days_Login):
- tmpCurDay := util.GetDurationDay2(tmpActivityData.StartTime, ms)
- tmpActivityData.CurDay = tmpCurDay
- tmpActivityData.LoginRewardList = append(tmpActivityData.LoginRewardList,
- &serverproto.KeyValueType{Key: tmpCurDay})
- case int32(serverproto.EActivityType_EActivityType_100Recharge):
- if tmpActivityData.ParamTime > 0 {
- tmpCurDay := util.GetDurationDay2(tmpActivityData.ParamTime, ms)
- tmpActivityData.CurDay = tmpCurDay
- }
- case int32(serverproto.EActivityType_EActivityType_Likability):
- tmpActivityData.LikabilityData = &serverproto.ActivitiesLikabilityData{
- Level: 1,
- }
- case int32(serverproto.EActivityType_EActivityType_Daily_Cum_Recharge):
- tmpActivityData.CurDay = util.GetDurationDay2(tmpActivityData.StartTime, ms)
- case int32(serverproto.EActivityType_EActivityType_King):
- this.InitKingGrowthTask(tmpActivityData)
- this.ResetTodayTask(tmpActivityData, ms)
- //活动转盘
- case int32(serverproto.EActivityType_EActivityType_Wheel):
- this.activityWheelInit(tmpActivityData)
- case int32(serverproto.EActivityType_EActivityType_SignIn):
- tmpActivityData.SignData = &serverproto.ActivitySignIn{}
- tmpActivityData.SignData.NextSignTime = util.GetLatest5Hour() - 24*3600*1000
- // bt服RO币每日累计充值
- case int32(serverproto.EActivityType_EActivityType_BT_ROCoinRecharge):
- tmpActivityData.CurDay = util.GetDurationDay2(tmpActivityData.StartTime, ms)
- tmpActivityData.BtRocoinData = &serverproto.ActivityBTROCoin{
- WeekDayEndTime: util.GetLatest5Hour() + 6*DayMS,
- }
- this.resetBTTasks(tmpActivityData)
- // bt服真假累计充值活动
- case int32(serverproto.EActivityType_EActivityType_BT_ZhenJiaRecharge):
- tmpActivityData.CurDay = util.GetDurationDay2(tmpActivityData.StartTime, ms)
- this.resetBTTasks(tmpActivityData)
- }
- this.activityDataList[convertData.Id] = tmpActivityData
- this.addChangeActivity(convertData.Id, 0)
- this.SetDirty(true)
- //之前该活动已经过期,后续有重新开启了该活动
- if this.delActivityList.Has(convertData.Id) {
- this.delActivityList.Remove(convertData.Id)
- this.addHasDelActivityList(convertData.Id, "OpenNewActivities")
- }
- util.DebugF("uid=%v OpenNewActivities ok activity id=%v", this.role.GetUUid(), convertData.Id)
- return true, tmpActivityData
- }
- func (this *RoleActivity) InitKingGrowthTask(activities *serverproto.ActivitiesDetailData) {
- activities.KingTask = activities.KingTask[:0]
- // 配置默认第一条读取全部成长任务
- db := model.GetKingTaskData(activities.ActivitiesId, 1)
- if db == nil {
- util.ErrorF("InitKingTask error")
- return
- }
- for _, taskId := range db.TaskIds {
- task := this.addDayTask(activities.ActivitiesId, uint32(taskId), 0, false, 1)
- if task == nil {
- continue
- }
- task.TaskType = model.TASK_TYPE_GROWUP
- activities.KingTask = append(activities.KingTask, task)
- }
- }
- // 重置国王的悬赏 今天挑战任务
- func (this *RoleActivity) ResetTodayTask(activities *serverproto.ActivitiesDetailData, curTime uint64) {
- diffDay := util.GetDurationDay2(activities.StartTime, curTime)
- db := model.GetKingTaskData(activities.ActivitiesId, diffDay)
- if db == nil {
- util.ErrorF(" ResetTodayTask error, diffDay %v", diffDay)
- return
- }
- // 删除今日挑战任务
- for i := 0; i < len(activities.KingTask); {
- if activities.KingTask[i].TaskType != model.TASK_TYPE_TODAY {
- i++
- continue
- }
- this.delKingTask(activities, activities.KingTask[i].TaskId)
- activities.KingTask = append(activities.KingTask[:i], activities.KingTask[i+1:]...)
- }
- for _, taskId := range db.DailyTaskIds {
- dbTask, ok := model.ConvertActivitiesTaskList[int32(taskId)]
- if !ok {
- continue
- }
- task := this.addDayTask(activities.ActivitiesId, uint32(dbTask.TaskId), 0, true, 1)
- if task == nil {
- continue
- }
- task.TaskType = model.TASK_TYPE_TODAY
- activities.KingTask = append(activities.KingTask, task)
- }
- //this.addChangeActivity(activities.ActivitiesId, 0)
- this.SetDirty(true)
- }
- func (this *RoleActivity) OnlineProcess() {
- //for _, val := range this.activityDataList {
- // if val.FightingTarget <= 0 {
- // continue
- // }
- // for _, data := range val.KingTask {
- // for _, progress := range data.Progress {
- // if progress.Key != int32(serverproto.TaskType_Eve_Fight_value){continue}
- // }
- // }
- // val.FightingTarget = 0
- // val.FightingTarget = this.role.roleBattleAttr.curTotalFightPower
- //}
- }
- func (this *RoleActivity) checkOpenNewActivitiesCondition(convertData *model.ConvertActivitiesData) bool {
- if convertData != nil && convertData.ActivityType == int32(serverproto.EActivityType_EActivityType_100Recharge) {
- //开启首充同时开启 百元大礼包
- for idx := 0; idx < len(model.ConvertActFirstRecharge.OpenConditionList); idx++ {
- condition := model.ConvertActFirstRecharge.OpenConditionList[idx]
- switch condition.Key {
- //累计充值达到指定数值
- case int32(serverproto.TaskType_Level_Battle_Count):
- if this.role.GetRoleBattle().GetLevelId() >= condition.Value && this.firstChargeTime > 0 {
- //判断是否触发过
- for idx := 0; idx < len(this.hasDelActivityList); idx++ {
- if this.hasDelActivityList[idx] == convertData.Id {
- return false
- }
- }
- return true
- }
- }
- }
- }
- return false
- }
- func (this *RoleActivity) getWeekNumber(tmpDay int32) int32 {
- return int32(math.Ceil(float64(tmpDay) / 7))
- }
- func (this *RoleActivity) open14DaysTask(activityData *serverproto.ActivitiesDetailData,
- convertData *model.ConvertActivitiesData) {
- tmpCurDay := util.GetDurationDay2(activityData.StartTime, util.GetTimeMilliseconds())
- tmpCurWeek := this.getWeekNumber(tmpCurDay)
- //开启活动
- sIdx := tmpCurWeek*7 - 6
- for idx := sIdx; idx <= tmpCurDay; idx++ {
- dayVal, ok := model.ConvertActivitiesFortnightDaysList[idx]
- if !ok {
- continue
- }
- for k := 0; k < len(dayVal.TaskList); k++ {
- this.addDayTask(convertData.Id, dayVal.TaskList[k], dayVal.Days, false, tmpCurDay)
- }
- if idx == tmpCurDay {
- for k := 0; k < len(dayVal.DailyTaskList); k++ {
- this.addDayTask(convertData.Id, dayVal.DailyTaskList[k], dayVal.Days, true, tmpCurDay)
- }
- }
- }
- activityData.CurDay = tmpCurDay
- this.addChangeActivity(convertData.Id, 0)
- this.SetDirty(true)
- }
- func (this *RoleActivity) getAllActivityReward(activityData *serverproto.ActivitiesDetailData) {
- switch activityData.ActivitiesType {
- case int32(serverproto.EActivityType_EActivityType_14_Days_Login):
- this.getAllActivityReward14DaysLogin(activityData)
- case int32(serverproto.EActivityType_EActivityType_14_Days_Task):
- this.getAllActivityReward14DaysTask(activityData)
- case int32(serverproto.EActivityType_EActivityType_King):
- this.getAllActivityKingTaskReward(activityData)
- this.delAllKingTask(activityData)
- //activityData.KingTask = activityData.KingTask[:0]
- case int32(serverproto.EActivityType_EActivityType_Daily_Cum_Recharge):
- this.getAllActivityRewardCurRecharge(activityData)
- case int32(serverproto.EActivityType_EActivityType_BT_ROCoinRecharge):
- this.getAllActivityRewardBTRoCoinRecharge(activityData)
- case int32(serverproto.EActivityType_EActivityType_BT_ZhenJiaRecharge):
- this.getAllActivityRewardBTZhenJiaRecharge(activityData)
- }
- }
- func (this *RoleActivity) getAllActivityRewardCurRecharge(activityData *serverproto.ActivitiesDetailData) {
- var addItemList = map[int32]int32{}
- day := activityData.CurDay
- tmpRewardState := activityData.RewardState
- for {
- cfgData := model.GetActTiredRechargeDb(tmpRewardState+1, day)
- if cfgData == nil {
- break
- }
- if this.role.GetDayRecharge() < float32(cfgData.Amount) {
- break
- }
- tmpRewardState++
- for idx := 0; idx < len(cfgData.Rewards); idx++ {
- item := cfgData.Rewards[idx]
- if !CheckHDItemAdd(item.Key, this.role) {
- continue
- }
- addItemList[item.Key] += item.Value
- }
- }
- if len(addItemList) > 0 {
- //发送邮件奖励
- this.role.AddMail(model.GlobalMailIdActivitiesCurRechargeReward, serverproto.MailType_MailType_Activities,
- addItemList, []int32{activityData.ActivitiesId}, "", "")
- }
- }
- func (this *RoleActivity) delKingTask(activityData *serverproto.ActivitiesDetailData, taskId uint32) {
- this.addChangeActivity(activityData.ActivitiesId, taskId)
- tasks, ok := this.activitiesTaskList[activityData.ActivitiesId]
- if ok {
- delete(tasks, taskId)
- }
- this.SetDirty(true)
- }
- func (this *RoleActivity) delAllKingTask(activityData *serverproto.ActivitiesDetailData) {
- for _, task := range activityData.KingTask {
- this.delKingTask(activityData, task.TaskId)
- }
- this.SetDirty(true)
- }
- func (this *RoleActivity) getAllActivityKingTaskReward(activityData *serverproto.ActivitiesDetailData, taskTypes ...int32) {
- var addItemList = map[int32]int32{}
- for _, data := range activityData.KingTask {
- if data.State != TASK_REWARD_STATE_COMPLETED {
- continue
- }
- if len(taskTypes) > 0 {
- award := false
- for _, taskType := range taskTypes {
- if data.TaskType != taskType {
- continue
- }
- award = true
- }
- if !award {
- continue
- }
- }
- convertData, ok := model.ConvertActivitiesTaskList[int32(data.TaskId)]
- if !ok {
- continue
- }
- for k, v := range convertData.RewardList {
- addItemList[k] += v
- }
- }
- if len(addItemList) > 0 {
- //发送邮件奖励
- this.role.AddMail(model.GlobalMailIdActivitiesReward, serverproto.MailType_MailType_Activities,
- addItemList, []int32{activityData.ActivitiesId}, "", "")
- }
- }
- func (this *RoleActivity) getAllActivityReward14DaysLogin(activityData *serverproto.ActivitiesDetailData) {
- var addItemList = map[int32]int32{}
- for idx := 0; idx < len(activityData.LoginRewardList); idx++ {
- tmpVal := activityData.LoginRewardList[idx]
- if tmpVal.Value > 0 {
- continue
- }
- tmpParamId := activityData.ActivitiesId*1000 + tmpVal.Key
- if rewardVal, ok := model.ConvertActivitiesFOList[tmpParamId]; ok {
- for key, val := range rewardVal {
- addItemList[key] += val
- }
- }
- }
- if len(addItemList) > 0 {
- //发送邮件奖励
- this.role.AddMail(model.GlobalMailIdActivitiesReward, serverproto.MailType_MailType_Activities,
- addItemList, []int32{activityData.ActivitiesId}, "", "")
- }
- }
- func (this *RoleActivity) getAllActivityReward14DaysTask(activityData *serverproto.ActivitiesDetailData) {
- var addItemList = map[int32]int32{}
- //获取任务奖励
- tmpTaskList, ok := this.activitiesTaskList[activityData.ActivitiesId]
- if ok {
- for _, val := range tmpTaskList {
- this.addChangeActivity(activityData.ActivitiesId, val.TaskId)
- if val.State == TASK_REWARD_STATE_COMPLETED {
- convertData, ok := model.ConvertActivitiesTaskList[int32(val.TaskId)]
- if !ok {
- continue
- }
- for k, v := range convertData.RewardList {
- addItemList[k] += v
- }
- if activityData.FortnightDays == nil {
- activityData.FortnightDays = &serverproto.ActivitiesFortnightDays{}
- }
- activityData.FortnightDays.TaskScore += convertData.TaskScore
- if convertData.TaskScore > 0 {
- this.addChangeActivity(activityData.ActivitiesId, 0)
- this.SetDirty(true)
- }
- }
- delete(tmpTaskList, val.TaskId)
- this.taskTypeList[activityData.ActivitiesId] = map[int32]set.Interface{}
- }
- }
- //获取积分宝箱奖励
- for _, weekBoxCfgData := range model.ConvertActivitiesFortnightDaysScoreList {
- for idx := 0; idx < len(weekBoxCfgData); idx++ {
- if activityData.FortnightDays == nil ||
- activityData.FortnightDays.TaskScoreReward&(1<<uint32(weekBoxCfgData[idx].RewardIdx)) > 0 {
- continue
- }
- if weekBoxCfgData[idx].Score <= activityData.FortnightDays.TaskScore {
- for k, v := range weekBoxCfgData[idx].RewardList {
- addItemList[k] += v
- }
- }
- }
- }
- if len(addItemList) > 0 {
- //发送邮件奖励
- this.role.AddMail(model.GlobalMailIdActivitiesReward, serverproto.MailType_MailType_Activities,
- addItemList, []int32{activityData.ActivitiesId}, "", "")
- }
- if activityData.FortnightDays != nil {
- activityData.FortnightDays.TaskScore = 0
- activityData.FortnightDays.TaskScoreReward = 0
- activityData.FortnightDays.TaskList = activityData.FortnightDays.TaskList[:0]
- this.addChangeActivity(activityData.ActivitiesId, 0)
- this.SetDirty(true)
- }
- }
- // isDaily=false表示成长任务 true表示每日挑战任务
- func (this *RoleActivity) addDayTask(activitiesId int32, taskId uint32, day int32, isDaily bool, tmpCurDay int32) *serverproto.TaskData {
- convertData, ok := model.ConvertActivitiesTaskList[int32(taskId)]
- if !ok {
- return nil
- }
- tmpTaskList, ok := this.activitiesTaskList[activitiesId]
- if !ok {
- tmpTaskList = map[uint32]*serverproto.TaskData{}
- this.activitiesTaskList[activitiesId] = tmpTaskList
- }
- taskDataInfo := &serverproto.TaskData{
- TaskId: taskId,
- State: TASK_REWARD_STATE_NONE,
- }
- if isDaily {
- taskDataInfo.BeginTime = uint64(day)
- }
- for taskType, _ := range convertData.ConditionList {
- if taskType == int32(serverproto.TaskType_Eve_Fight_value) {
- addProgress := &serverproto.TaskProgressType{
- Key: taskType,
- Value: 0,
- }
- roleBase := this.role.GetRoleBase()
- if roleBase != nil && roleBase.RoleData() != nil {
- addProgress.Total = uint32(roleBase.RoleData().FightPower)
- }
- taskDataInfo.Progress = append(taskDataInfo.Progress, addProgress)
- }
- }
- this.addChangeActivity(activitiesId, taskId)
- tmpTaskList[taskDataInfo.TaskId] = taskDataInfo
- this.addTaskType(activitiesId, convertData)
- this.SetDirty(true)
- //当前的挑战任务进度处理
- if tmpCurDay == day || !isDaily {
- TaskConditionCheck(this.role, taskDataInfo, serverproto.TaskType_NONE, convertData.ConditionList, 0, false)
- }
- return taskDataInfo
- }
- func (this *RoleActivity) addChangeActivity(activitiesId int32, taskId uint32) {
- //taskId == 0表示活动本身数据变更
- tmpChangeList, ok := this.changeTaskList[activitiesId]
- if !ok {
- tmpChangeList = set.New(set.NonThreadSafe)
- tmpChangeList.Add(taskId)
- this.changeTaskList[activitiesId] = tmpChangeList
- } else {
- tmpChangeList.Add(taskId)
- }
- this.SetDirty(true)
- }
- func (this *RoleActivity) TaskCheck(taskType serverproto.TaskType, count int32) {
- this.initTaskTypeList()
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- //充值类活动处理
- this.taskCheckRecharge(ntfMsg)
- //任务类型
- for activitiesId, valList := range this.taskTypeList {
- typeList, ok := valList[int32(taskType)]
- if !ok || typeList.Size() <= 0 {
- continue
- }
- activityData, ok := this.activityDataList[activitiesId]
- if !ok {
- continue
- }
- var tmpNtfData *serverproto.ActivitiesDetailData = nil
- //tmpNtfData := &serverproto.ActivitiesDetailData{
- // ActivitiesType: activityData.ActivitiesType,
- // ActivitiesId: activityData.ActivitiesId,
- // CurDay: activityData.CurDay,
- // StartTime: activityData.StartTime,
- // EndTime: activityData.EndTime,
- //}
- for _, val := range typeList.List() {
- tmpTaskId := val.(uint32)
- taskInfo := this.getTaskData(activityData.ActivitiesId, tmpTaskId)
- if taskInfo == nil {
- typeList.Remove(tmpTaskId)
- continue
- }
- convertData, ok := model.ConvertActivitiesTaskList[int32(tmpTaskId)]
- if !ok {
- typeList.Remove(tmpTaskId)
- continue
- }
- //判断是否是今天挑战任务,只能完成当天任务
- if taskInfo.BeginTime > 0 && taskInfo.BeginTime != uint64(activityData.CurDay) {
- continue
- }
- ret := TaskConditionCheck(this.role, taskInfo, taskType, convertData.ConditionList, count, false)
- if ret {
- if tmpNtfData == nil {
- tmpNtfData = &serverproto.ActivitiesDetailData{
- ActivitiesType: activityData.ActivitiesType,
- ActivitiesId: activityData.ActivitiesId,
- CurDay: activityData.CurDay,
- StartTime: activityData.StartTime,
- EndTime: activityData.EndTime,
- }
- }
- this.addChangeActivity(activityData.ActivitiesId, tmpTaskId)
- if activityData.ActivitiesType == int32(serverproto.EActivityType_EActivityType_14_Days_Task) {
- if tmpNtfData.FortnightDays == nil {
- tmpNtfData.FortnightDays = &serverproto.ActivitiesFortnightDays{}
- }
- if activityData.FortnightDays != nil {
- tmpNtfData.FortnightDays.TaskScore = activityData.FortnightDays.TaskScore
- tmpNtfData.FortnightDays.TaskScoreReward = activityData.FortnightDays.TaskScoreReward
- }
- tmpNtfData.FortnightDays.TaskList = append(tmpNtfData.FortnightDays.TaskList, taskInfo)
- } else if activityData.ActivitiesType == int32(serverproto.EActivityType_EActivityType_BT_ZhenJiaRecharge) {
- // BT task data
- tmpNtfData.BtZhenjiaRechargeTaskList = append(activityData.BtZhenjiaRechargeTaskList, taskInfo)
- } else if activityData.ActivitiesType == int32(serverproto.EActivityType_EActivityType_BT_ROCoinRecharge) {
- // BT task data
- if tmpNtfData.BtRocoinData == nil {
- tmpNtfData.BtRocoinData = &serverproto.ActivityBTROCoin{
- WeekDayEndTime: activityData.BtRocoinData.WeekDayEndTime,
- }
- }
- if taskInfo.TaskType == int32(model.BTTaskRefreshType_Day) {
- tmpNtfData.BtRocoinData.DailyTaskList = append(tmpNtfData.BtRocoinData.DailyTaskList, taskInfo)
- } else {
- tmpNtfData.BtRocoinData.WeekTaskList = append(tmpNtfData.BtRocoinData.WeekTaskList, taskInfo)
- }
- }
- this.SetDirty(true)
- }
- }
- if tmpNtfData != nil {
- if tmpNtfData.ActivitiesType == int32(serverproto.EActivityType_EActivityType_King) {
- if len(activityData.KingTask) > 0 {
- tmpNtfData.KingTask = activityData.KingTask
- //tmpNtfData.FightingTarget = activityData.FightingTarget
- }
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, tmpNtfData)
- }
- }
- if len(ntfMsg.ActivityDataList) > 0 {
- this.role.ReplayGate(ntfMsg, true)
- util.InfoF("uid=%v TaskCheck changelist=%v", this.role.GetUUid(), ntfMsg)
- }
- }
- // 充值类活动处理
- func (this *RoleActivity) taskCheckRecharge(ntfMsg *serverproto.SCActivitiesChangeNtf) {
- //百元礼包处理
- for _, val := range this.activityDataList {
- if val.ActivitiesType == int32(serverproto.EActivityType_EActivityType_100Recharge) {
- if val.ParamTime > 0 {
- break
- }
- if this.role.GetTotalRecharge() >= model.ConvertAct100Recharge.RechargeAmount {
- val.ParamTime = util.GetTimeMilliseconds()
- this.SetDirty(true)
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, val)
- }
- break
- }
- }
- }
- func (this *RoleActivity) initTaskTypeList() {
- if this.initTaskType {
- return
- }
- if len(this.activitiesTaskList) > 0 {
- this.initTaskType = true
- }
- for activitiesId, actTaskList := range this.activitiesTaskList {
- for _, val := range actTaskList {
- convertData, ok := model.ConvertActivitiesTaskList[int32(val.TaskId)]
- if !ok {
- this.addChangeActivity(activitiesId, val.TaskId)
- delete(actTaskList, val.TaskId)
- this.delTaskType(activitiesId, convertData)
- continue
- }
- this.addTaskType(activitiesId, convertData)
- }
- }
- }
- func (this *RoleActivity) addTaskType(activitiesId int32, convertData *model.ConvertActivitiesTaskData) {
- tmpTaskType, ok := this.taskTypeList[activitiesId]
- if !ok {
- tmpTaskType = map[int32]set.Interface{}
- this.taskTypeList[activitiesId] = tmpTaskType
- }
- for key := range convertData.ConditionList {
- if _, ok := tmpTaskType[key]; !ok {
- tmpTaskType[key] = set.New(set.NonThreadSafe)
- }
- tmpTaskType[key].Add(uint32(convertData.TaskId))
- }
- }
- func (this *RoleActivity) delTaskType(activitiesId int32, convertData *model.ConvertActivitiesTaskData) {
- tmpTaskType, ok := this.taskTypeList[activitiesId]
- if ok {
- for key := range convertData.ConditionList {
- if _, ok := tmpTaskType[key]; ok {
- tmpTaskType[key].Remove(uint32(convertData.TaskId))
- }
- }
- }
- }
- func (this *RoleActivity) getTaskData(activitiesId int32, taskId uint32) *serverproto.TaskData {
- tmpData, ok := this.activitiesTaskList[activitiesId]
- if ok {
- if taskInfo, ok := tmpData[taskId]; ok {
- return taskInfo
- }
- }
- return nil
- }
- func (this *RoleActivity) getActivityData(activityId int32) *serverproto.ActivitiesDetailData {
- activityData, ok := this.activityDataList[activityId]
- if ok {
- if util.GetTimeMilliseconds() >= activityData.EndTime && activityData.EndTime > 0 {
- return nil
- }
- return activityData
- }
- return nil
- }
- func (this *RoleActivity) getActivityByType(ActivityType int32) (rets []*serverproto.ActivitiesDetailData) {
- for _, data := range this.activityDataList {
- if data.ActivitiesType != ActivityType {
- continue
- }
- if util.GetTimeMilliseconds() >= data.EndTime && data.EndTime > 0 {
- continue
- }
- rets = append(rets, data)
- }
- return
- }
- // 精彩活动奖励获取
- func (this *RoleActivity) ActivitiesReward(activityId int32, param int32, rewardNum int32) serverproto.ErrorCode {
- cfgData, ok := model.ConvertActivitiesList[activityId]
- if !ok {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- switch (serverproto.EActivityType)(cfgData.ActivityType) {
- case serverproto.EActivityType_EActivityType_14_Days_Login: //14日登录
- return this.activitiesReward14DaysLogin(activityId, param)
- case serverproto.EActivityType_EActivityType_14_Days_Task: //14日目标任务
- return this.activitiesReward14DaysTask(activityId, param)
- case serverproto.EActivityType_EActivityType_100Recharge: //百元礼包
- return this.activitiesReward100Recharge(activityId)
- case serverproto.EActivityType_EActivityType_Daily_Cum_Recharge: //每日累充活动
- return this.activitiesRewardDailyCumRecharge(activityId)
- case serverproto.EActivityType_EActivityType_ExChange: //集字活动
- return this.activitiesRewardCollection(activityId, param, nil, rewardNum)
- case serverproto.EActivityType_EActivityType_King: // 国王的盛宴任务
- return this.activitiesRewardKingTask(activityId, param, rewardNum)
- case serverproto.EActivityType_EActivityType_BT_ROCoinRecharge: // bt RO币累计活动
- return this.activitiesRewardBTRoCoinRecharge(activityId, param)
- case serverproto.EActivityType_EActivityType_BT_ZhenJiaRecharge: // 真/假每日累计充值活动
- return this.activitiesRewardBTZhenJiaRecharge(activityId, param)
- default:
- return serverproto.ErrorCode_ERROR_FAIL
- }
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RoleActivity) activitiesReward14DaysLogin(activityId, param int32) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- if param >= 100 || param <= 0 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- //已经获取当天奖励
- bFindIdx := -1
- for idx := 0; idx < len(activityData.LoginRewardList); idx++ {
- if activityData.LoginRewardList[idx].Key != param {
- continue
- }
- if activityData.LoginRewardList[idx].Value > 0 {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_HAS_REWARD
- }
- bFindIdx = idx
- break
- }
- if param > activityData.CurDay {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT_CUR_DAY_REWARD
- }
- tmpParamId := activityId*1000 + param
- if rewardVal, ok := model.ConvertActivitiesFOList[tmpParamId]; ok {
- ret := this.role.CanAddItemList(rewardVal)
- if ret != serverproto.ErrorCode_ERROR_OK {
- return ret
- }
- if bFindIdx > -1 {
- activityData.LoginRewardList[bFindIdx].Value = 1
- } else {
- //消耗资源补签
- if !this.role.GetRoleBag().CanDelItem(int32(serverproto.ResType_Res_Rmb), model.GlobalActivities14DaysLogin) {
- return this.role.GetResNotice(int32(serverproto.ResType_Res_Rmb))
- }
- this.role.DelItem(int32(serverproto.ResType_Res_Rmb), model.GlobalActivities14DaysLogin, AddItemST{AddFrom: AddFrom_Activities})
- activityData.LoginRewardList = append(activityData.LoginRewardList, &serverproto.KeyValueType{Key: param, Value: 1})
- }
- this.role.AddItemList(rewardVal, AddFrom_Activities, true)
- this.addChangeActivity(activityId, 0)
- this.SetDirty(true)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, activityData)
- this.role.ReplayGate(ntfMsg, true)
- //ack奖励处理
- ackMsg := &serverproto.SCActivitiesRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- ActivityId: activityData.ActivitiesId,
- }
- for key, val := range rewardVal {
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, &serverproto.KeyValueType{Key: key, Value: val})
- }
- this.role.ReplayGate(ackMsg, true)
- return serverproto.ErrorCode_ERROR_OK
- } else {
- //无奖励数据
- return serverproto.ErrorCode_ERROR_FAIL
- }
- }
- func (this *RoleActivity) checkTaskInfo(taskInfo *serverproto.TaskData) bool {
- convertData, ok := model.ConvertActivitiesTaskList[int32(taskInfo.TaskId)]
- if !ok {
- return false
- }
- return TaskConditionCheck(this.role, taskInfo, 0, convertData.ConditionList, 0, true)
- }
- func (this *RoleActivity) activitiesRewardKingTask(activityId, taskId int32, taskType int32) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- taskInfo := this.getTaskData(activityId, uint32(taskId))
- if taskInfo == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_TASK_NOT
- }
- if taskInfo.State == TASK_REWARD_STATE_REWARD {
- return serverproto.ErrorCode_ERROR_TASK_REWARDED
- }
- //应对玩家任务条件调整
- if taskInfo.State != TASK_REWARD_STATE_COMPLETED {
- if this.checkTaskInfo(taskInfo) {
- if taskInfo.State != TASK_REWARD_STATE_COMPLETED {
- return serverproto.ErrorCode_ERROR_TASK_REWARDED
- }
- } else {
- return serverproto.ErrorCode_ERROR_TASK_REWARDED
- }
- }
- convertData, ok := model.ConvertActivitiesTaskList[int32(taskInfo.TaskId)]
- if !ok {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_TASK_NOT
- }
- ret := this.role.CanAddItemList(convertData.RewardList)
- if ret != serverproto.ErrorCode_ERROR_OK {
- return ret
- }
- this.role.AddItemList(convertData.RewardList, AddFrom_Activities, true)
- //任务状态修改
- taskInfo.State = TASK_REWARD_STATE_REWARD
- this.addChangeActivity(activityId, taskInfo.TaskId)
- this.addChangeActivity(activityId, 0)
- this.SetDirty(true)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- detailData := &serverproto.ActivitiesDetailData{
- ActivitiesId: activityId,
- ActivitiesType: activityData.ActivitiesType,
- StartTime: activityData.StartTime,
- EndTime: activityData.EndTime,
- KingTask: activityData.KingTask,
- }
- //detailData.FortnightDays.TaskList = append(detailData.FortnightDays.TaskList, taskInfo)
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, detailData)
- this.role.ReplayGate(ntfMsg, true)
- //ack奖励处理
- ackMsg := &serverproto.SCActivitiesRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- ActivityId: activityId,
- }
- for key, val := range convertData.RewardList {
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, &serverproto.KeyValueType{Key: key, Value: val})
- }
- this.role.ReplayGate(ackMsg, true)
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RoleActivity) activitiesReward14DaysTask(activityId, param int32) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- if param <= 0 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- taskInfo := this.getTaskData(activityId, uint32(param))
- if taskInfo == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_TASK_NOT
- }
- if taskInfo.State == TASK_REWARD_STATE_REWARD {
- return serverproto.ErrorCode_ERROR_TASK_REWARDED
- }
- //应对玩家任务条件调整
- if taskInfo.State != TASK_REWARD_STATE_COMPLETED {
- if this.checkTaskInfo(taskInfo) {
- if taskInfo.State != TASK_REWARD_STATE_COMPLETED {
- return serverproto.ErrorCode_ERROR_TASK_REWARDED
- }
- } else {
- return serverproto.ErrorCode_ERROR_TASK_REWARDED
- }
- }
- convertData, ok := model.ConvertActivitiesTaskList[int32(taskInfo.TaskId)]
- if !ok {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_TASK_NOT
- }
- ret := this.role.CanAddItemList(convertData.RewardList)
- if ret != serverproto.ErrorCode_ERROR_OK {
- return ret
- }
- this.role.AddItemList(convertData.RewardList, AddFrom_Activities, true)
- //任务状态修改
- taskInfo.State = TASK_REWARD_STATE_REWARD
- //累计任务积分
- if activityData.FortnightDays == nil {
- activityData.FortnightDays = &serverproto.ActivitiesFortnightDays{}
- }
- activityData.FortnightDays.TaskScore += convertData.TaskScore
- this.addChangeActivity(activityId, taskInfo.TaskId)
- this.addChangeActivity(activityId, 0)
- this.SetDirty(true)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- detailData := &serverproto.ActivitiesDetailData{
- ActivitiesId: activityId,
- ActivitiesType: activityData.ActivitiesType,
- StartTime: activityData.StartTime,
- EndTime: activityData.EndTime,
- CurDay: activityData.CurDay,
- FortnightDays: &serverproto.ActivitiesFortnightDays{
- TaskScore: activityData.FortnightDays.TaskScore,
- TaskScoreReward: activityData.FortnightDays.TaskScoreReward,
- },
- }
- detailData.FortnightDays.TaskList = append(detailData.FortnightDays.TaskList, taskInfo)
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, detailData)
- this.role.ReplayGate(ntfMsg, true)
- //ack奖励处理
- ackMsg := &serverproto.SCActivitiesRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- ActivityId: activityId,
- }
- for key, val := range convertData.RewardList {
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, &serverproto.KeyValueType{Key: key, Value: val})
- }
- this.role.ReplayGate(ackMsg, true)
- return serverproto.ErrorCode_ERROR_OK
- }
- // 宝箱奖励获取
- func (this *RoleActivity) ActivitiesScoreReward(activityId, boxId int32) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- if activityData.ActivitiesType != int32(serverproto.EActivityType_EActivityType_14_Days_Task) ||
- activityData.FortnightDays == nil || activityData.FortnightDays.TaskScore <= 0 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- if boxId <= 0 || boxId > 30 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- if activityData.FortnightDays.TaskScoreReward&(1<<uint32(boxId)) > 0 {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_BOX_REWARD_HAS
- }
- //获取奖励
- ackMsg := &serverproto.SCActivitiesScoreRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- ActivityId: activityId,
- }
- addItemList := map[int32]int32{}
- for _, weekBoxCfgData := range model.ConvertActivitiesFortnightDaysScoreList {
- for idx := 0; idx < len(weekBoxCfgData); idx++ {
- if weekBoxCfgData[idx].RewardIdx == boxId {
- if weekBoxCfgData[idx].Score <= activityData.FortnightDays.TaskScore {
- for k, v := range weekBoxCfgData[idx].RewardList {
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, &serverproto.KeyValueType{Key: k, Value: v})
- addItemList[k] += v
- }
- }
- break
- }
- }
- }
- if len(addItemList) <= 0 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- ret := this.role.CanAddItemList(addItemList)
- if ret != serverproto.ErrorCode_ERROR_OK {
- return ret
- }
- this.role.AddItemList(addItemList, AddFrom_Activities, true)
- util.InfoF("uid=%v ActivitiesScoreReward rewardlist=%v", this.role.GetUUid(), addItemList)
- activityData.FortnightDays.TaskScoreReward |= 1 << uint32(boxId)
- this.addChangeActivity(activityId, 0)
- this.SetDirty(true)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- detailData := &serverproto.ActivitiesDetailData{
- ActivitiesId: activityId,
- ActivitiesType: activityData.ActivitiesType,
- StartTime: activityData.StartTime,
- EndTime: activityData.EndTime,
- CurDay: activityData.CurDay,
- FortnightDays: &serverproto.ActivitiesFortnightDays{
- TaskScore: activityData.FortnightDays.TaskScore,
- TaskScoreReward: activityData.FortnightDays.TaskScoreReward,
- },
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, detailData)
- this.role.ReplayGate(ntfMsg, true)
- this.role.ReplayGate(ackMsg, true)
- return serverproto.ErrorCode_ERROR_OK
- }
- // /充值活动相关
- // 首充
- func (this *RoleActivity) FirstChargeUnlockState() bool {
- bOk := false
- // 开启的同时开启百元大礼包活动
- //conditionList := model.ConvertActFirstRecharge.OpenConditionStrList
- levelUnlock := this.role.GetRoleBase().checkUnLockState(0, model.ConvertActFirstRecharge.OpenConditionList)
- if this.firstChargeTime == 0 && this.firstChargeRewardStat == 0 && levelUnlock == serverproto.ErrorCode_ERROR_OK &&
- this.role.GetTotalRecharge() >= model.ConvertActFirstRecharge.RechargeAmount {
- this.firstChargeTime = util.GetTimeMilliseconds()
- this.SetDirty(true)
- bOk = true
- firstChargeNtfMsg := &serverproto.SCActivitiesFirstChargeChangeNtf{
- FirstChargeTime: this.firstChargeTime,
- FirstChargeRewardState: this.firstChargeRewardStat,
- }
- this.role.ReplayGate(firstChargeNtfMsg, true)
- }
- //根据玩家开启系统决定活动开启
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- openListNtfMsg := &serverproto.SCActivitiesOpenListNtf{}
- for _, convertData := range ActivitiesMag.RoleSystemActList {
- ret, detailInfo := this.OpenNewActivities(convertData, util.GetTimeMilliseconds(), false)
- if ret {
- tmpData := &serverproto.ActivitiesData{
- Id: convertData.Id,
- Type: convertData.ActivityType,
- Bg: convertData.BG,
- }
- openListNtfMsg.ActivityList = append(openListNtfMsg.ActivityList, tmpData)
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, detailInfo)
- }
- }
- if len(openListNtfMsg.ActivityList) > 0 {
- this.role.ReplayGate(openListNtfMsg, true)
- }
- if len(ntfMsg.ActivityDataList) > 0 {
- this.role.ReplayGate(ntfMsg, true)
- }
- return bOk
- }
- // 超值礼包开启(利用任务类型触发)
- type SuperChargeUnlockST struct {
- oldValue int32
- rewardCardList map[int32]int32
- }
- func (this *RoleActivity) SuperChargeUnlockCheck(unlockType serverproto.UnlockChargeType, st *SuperChargeUnlockST) {
- oldValue := st.oldValue
- nowTime := util.GetTimeMilliseconds()
- bAdd := false
- typeSuperList, ok := model.ConvertActDiscountsRechargeList[int32(unlockType)]
- if !ok {
- //util.ErrorF("list:%v", model.ConvertActDiscountsRechargeList)
- return
- }
- //util.ErrorF("list2:%v", model.ConvertActDiscountsRechargeList)
- for idx := 0; idx < len(typeSuperList); idx++ {
- cfgData := typeSuperList[idx]
- //for _, cfgData := range typeSuperList {
- //if cfgData.OpenCondition.Key != int32(unlockType) {
- // continue
- //}
- //已经触发的并超过触发次数则不再触发
- tmpVal, ok := this.unlockChargeHasList[cfgData.ProductId]
- //tmpVal, ok := this.unlockChargeHasList[cfgData.Id]
- if ok && tmpVal.Value >= cfgData.UnlockCount {
- continue
- }
- val := cfgData.OpenCondition.ValueList[0]
- var curVal int32 = 0
- switch unlockType {
- case serverproto.UnlockChargeType_UChargeType_BattleLevel: //通关指定关卡,触发此类的超值礼包
- curVal = this.role.GetRoleBattle().GetLevelId()
- //优化处理,列表中为有序列表
- if curVal < val {
- break
- }
- case serverproto.UnlockChargeType_UChargeType_ClimbTowerLevel: //试炼之塔到达指定的层数,触发此类超值礼包
- curVal = this.role.GetRoleTower().GetCurTower()
- case serverproto.UnlockChargeType_UChargeType_BaseLevel: //主角等级达到指定等级,触发此类的超值礼包
- curVal = this.role.GetRoleLevel()
- case serverproto.UnlockChargeType_UChargeType_SkillLevelUp: //技能升级 资源不够
- val1 := cfgData.OpenCondition.ValueList[1]
- if this.role.GetRoleLevel() >= val && this.role.GetRoleBase().GetCruise() < val1 {
- //是否需要根据累计充值来触发
- if cfgData.Recharge > 0 {
- rechargeTap := this.role.GetTotalRechargeTap()
- if rechargeTap <= 0 || rechargeTap != cfgData.Recharge {
- continue
- }
- }
- //解锁特定超值礼包
- unlockData := &serverproto.ActivitiesUnlockRechargeData{
- ActivitiesId: cfgData.Id,
- StartTime: nowTime,
- EndTime: nowTime + cfgData.DurationTime,
- }
- this.superUnlockChargeList = append(this.superUnlockChargeList, unlockData)
- bAdd = true
- if tmpVal == nil {
- tmpVal = &serverproto.KeyValueType{Key: cfgData.ProductId, Value: 1}
- } else {
- tmpVal.Value++
- }
- this.unlockChargeHasList[tmpVal.Key] = tmpVal
- continue
- }
- case serverproto.UnlockChargeType_UChargeType_SKillAdvance: //所有英雄技能进阶次数
- curVal = this.role.GetRoleSkill().GetAllHeroSkillAdvanceNum()
- case serverproto.UnlockChargeType_UChargeType_DrawCardMVP: //抽卡 获得MVP
- fallthrough
- case serverproto.UnlockChargeType_UChargeType_DrawPetMVP: //抽宠 获得MVP
- curVal = oldValue
- if val != oldValue {
- curVal = 0
- }
- case serverproto.UnlockChargeType_UChargeType_DrawCardQualityNum: //抽到5个蓝色卡片时触发
- if len(cfgData.OpenCondition.ValueList) >= 2 {
- val = cfgData.OpenCondition.ValueList[1]
- cardQuality := cfgData.OpenCondition.ValueList[0]
- for k, v := range st.rewardCardList {
- cardCfg, ok2 := serverproto.CardCfgLoader[k]
- if !ok2 {
- continue
- }
- if cardCfg.CardType == cardQuality {
- curVal += v
- }
- }
- } else {
- util.ErrorF("uid=%v SuperChargeUnlockCheck unlockType=%v", this.role.GetUUid(), unlockType)
- return
- }
- case serverproto.UnlockChargeType_UChargeType_DrawCardSpecial: //抽卡保底
- fallthrough
- case serverproto.UnlockChargeType_UChargeType_DrawPetSpecial: //抽宠物保底
- fallthrough
- case serverproto.UnlockChargeType_UChargeType_DrawSkillEquipSpecial: //抽神器保底
- curVal = oldValue
- if val != oldValue {
- curVal = 0
- }
- case serverproto.UnlockChargeType_UChargeType_HeroStrength: //伙伴突破
- fallthrough
- case serverproto.UnlockChargeType_UChargeType_HeroLevel: //伙伴等级
- fallthrough
- case serverproto.UnlockChargeType_UChargeType_PayAmount: //单次充值金额
- fallthrough
- case serverproto.UnlockChargeType_UChargeType_ZenyOnceCost: //银币一次性消耗 资源不够
- fallthrough
- case serverproto.UnlockChargeType_UChargeType_ShopNormalRMBCost: //普通商店 金币消耗数量
- fallthrough
- case serverproto.UnlockChargeType_UChargeType_ArenaShopCost: //英灵殿商店 功勋消耗数量
- fallthrough
- case serverproto.UnlockChargeType_UChargeType_GuildShopCost: //公会商店 公会币消耗数量
- fallthrough
- case serverproto.UnlockChargeType_UChargeType_SpecialShopRMB: //黑市商店 金币消耗数量
- fallthrough
- case serverproto.UnlockChargeType_UChargeType_PetShopCost: //宠物商店 分解石消耗数量
- curVal = oldValue
- case serverproto.UnlockChargeType_UChargeType_DailyGift: //每日礼包弹窗
- util.ErrorF("uid=%v dailyGift id=%v val:%v level:%v", this.role.GetUUid(), cfgData.Id, val, this.role.GetRoleLevel())
- if this.role.GetRoleLevel() >= val {
- //是否需要根据累计充值来触发
- //if cfgData.Recharge > 0 {
- // rechargeTap := this.role.GetTotalRechargeTap()
- // if rechargeTap <= 0 || rechargeTap != cfgData.Recharge {
- // continue
- // }
- //}
- //util.ErrorF("uid=%v dailyGift id=%v", this.role.GetUUid(), cfgData.Id)
- //解锁特定超值礼包
- unlockData := &serverproto.ActivitiesUnlockRechargeData{
- ActivitiesId: cfgData.Id,
- StartTime: nowTime,
- EndTime: nowTime + cfgData.DurationTime,
- }
- this.superUnlockChargeList = append(this.superUnlockChargeList, unlockData)
- bAdd = true
- if tmpVal == nil {
- tmpVal = &serverproto.KeyValueType{Key: cfgData.ProductId, Value: 1}
- } else {
- tmpVal.Value++
- }
- this.unlockChargeHasList[tmpVal.Key] = tmpVal
- continue
- }
- }
- if curVal > 0 && curVal >= val {
- //是否需要根据累计充值来触发
- if cfgData.Recharge > 0 {
- rechargeTap := this.role.GetTotalRechargeTap()
- if rechargeTap <= 0 || rechargeTap != cfgData.Recharge {
- continue
- }
- }
- //条件优先级触发类型
- //解锁特定超值礼包
- unlockData := &serverproto.ActivitiesUnlockRechargeData{
- ActivitiesId: cfgData.Id,
- StartTime: nowTime,
- EndTime: nowTime + cfgData.DurationTime,
- }
- this.superUnlockChargeList = append(this.superUnlockChargeList, unlockData)
- bAdd = true
- if tmpVal == nil {
- tmpVal = &serverproto.KeyValueType{Key: cfgData.ProductId, Value: 1}
- } else {
- tmpVal.Value++
- }
- this.unlockChargeHasList[tmpVal.Key] = tmpVal
- util.InfoF("uid=%v SuperChargeUnlockCheck unlock cfg=%v totalRecharge=%v", this.role.GetUUid(),
- cfgData.Id, this.role.GetTotalRecharge())
- }
- }
- if bAdd {
- this.SetDirty(true)
- ntfMsg := &serverproto.SCActivitiesDiscountsNtf{
- DiscountDataList: this.superUnlockChargeList,
- }
- this.role.ReplayGate(ntfMsg, true)
- }
- }
- // 获取首充奖励
- func (this *RoleActivity) ActivitiesFirstChargeReward() serverproto.ErrorCode {
- if this.firstChargeTime <= 0 || model.ConvertActFirstRecharge == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_REWARD_NOT
- }
- ackMsg := &serverproto.SCActivitiesFirstChargeRewardAck{}
- nowTime := util.GetTimeMilliseconds()
- diffDay := util.GetDurationDay2(this.firstChargeTime, nowTime)
- var maxDiffDay int32 = 3
- if diffDay < maxDiffDay {
- maxDiffDay = diffDay
- }
- for idx := 1; idx <= int(maxDiffDay); idx++ {
- if this.firstChargeRewardStat&(1<<uint32(idx)) > 0 {
- continue
- }
- this.firstChargeRewardStat |= 1 << uint32(idx)
- switch idx {
- case 1:
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, model.ConvertActFirstRecharge.Day1Reward...)
- case 2:
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, model.ConvertActFirstRecharge.Day2Reward...)
- case 3:
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, model.ConvertActFirstRecharge.Day3Reward...)
- }
- }
- //奖励领取完毕,活动消失(首充和百元奖励都领取完毕)
- this.checkFirstChargeAnd100RechargeEnd(0, nil)
- if len(ackMsg.RewardItemList) > 0 {
- ntfMsg := &serverproto.SCActivitiesFirstChargeChangeNtf{
- FirstChargeRewardState: this.firstChargeRewardStat,
- FirstChargeTime: this.firstChargeTime,
- }
- this.role.ReplayGate(ntfMsg, true)
- var addItemList = map[int32]int32{}
- for idx := 0; idx < len(ackMsg.RewardItemList); idx++ {
- item := ackMsg.RewardItemList[idx]
- addItemList[item.Key] += item.Value
- }
- this.role.AddItemList(addItemList, AddFrom_Activities, true)
- this.role.ReplayGate(ackMsg, true)
- this.SetDirty(true)
- return serverproto.ErrorCode_ERROR_OK
- }
- return serverproto.ErrorCode_ERROR_ACTIVITIES_REWARD_NOT
- }
- func (this *RoleActivity) ActivitiesLikability(activityId int32, itemId, likabilityItemLevel int32) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT_LIKE
- }
- if activityData.ActivitiesType != int32(serverproto.EActivityType_EActivityType_Likability) {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT_LIKE
- }
- actCfgData, ok := model.ConvertActivitiesList[activityId]
- if !ok {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT_LIKE
- }
- if !actCfgData.HDItemList.Has(itemId) {
- util.InfoF("uid=%v ActivitiesLikability itemId=%v not correct", this.role.GetUUid(), itemId)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- cfgActivityData, ok := model.ConvertActLikabilityItemList[activityId]
- if !ok {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- cfgData, ok := cfgActivityData[itemId]
- if !ok {
- util.InfoF("uid=%v ActivitiesLikability itemId=%v not correct", this.role.GetUUid(), itemId)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- if likabilityItemLevel <= 0 || int(likabilityItemLevel) > len(cfgData.LikabilityList) {
- util.InfoF("uid=%v ActivitiesLikability likabilityLevel=%v not correct", this.role.GetUUid(), likabilityItemLevel)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- if activityData.LikabilityData == nil {
- activityData.LikabilityData = &serverproto.ActivitiesLikabilityData{
- Level: 1,
- }
- this.addChangeActivity(activityId, 0)
- this.SetDirty(true)
- }
- likeCfgActivityData, ok := model.ConvertActLikabilityList[activityId]
- if !ok {
- util.ErrorF("uid=%v ActivitiesLikability ConvertActLikability level=%v not correct", this.role.GetUUid(), activityData.LikabilityData.Level)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- likeCfgData, ok := likeCfgActivityData[activityData.LikabilityData.Level]
- if !ok {
- util.ErrorF("uid=%v ActivitiesLikability ConvertActLikability level=%v not correct", this.role.GetUUid(), activityData.LikabilityData.Level)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- //好感度等级已达上限
- if uint32(likeCfgData.LikeValMax) <= activityData.LikabilityData.Param {
- _, ok := likeCfgActivityData[activityData.LikabilityData.Level+1]
- if !ok {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_LIKE_LEVEL_LIMIT
- }
- }
- //消耗道具判断
- addKv := cfgData.LikabilityList[likabilityItemLevel-1]
- if !this.role.GetRoleBag().CanDelItem(addKv.Key, addKv.ValueList[0]) {
- return serverproto.ErrorCode_ERROR_RES_NOT_ENOUGH
- }
- oldLikeLevel := activityData.LikabilityData.Level
- oldLikeVal := int32(activityData.LikabilityData.Param)
- newLikeVal := oldLikeVal + addKv.ValueList[1]
- rewardList := map[int32]int32{}
- retLikeLevel, retLikeVal := this.activitiesLikabilityAddVal(likeCfgActivityData, oldLikeLevel, oldLikeVal, newLikeVal, rewardList)
- if len(rewardList) > 0 {
- ret := this.role.CanAddItemList(rewardList)
- if ret != serverproto.ErrorCode_ERROR_OK {
- return ret
- }
- this.role.AddItemList(rewardList, AddFrom_Activities, true)
- }
- this.role.DelItem(addKv.Key, addKv.ValueList[0], AddItemST{AddFrom: AddFrom_Activities, Notify: true})
- activityData.LikabilityData.Level = retLikeLevel
- activityData.LikabilityData.Param = uint32(retLikeVal)
- this.addChangeActivity(activityId, 0)
- this.SetDirty(true)
- util.InfoF("uid=%v ActivitiesLikability activityId=%v itemId=%v newLevel=%v newVal=%v oldLevel=%v oldVal=%v",
- this.role.GetUUid(), activityId, itemId, retLikeLevel, retLikeVal, oldLikeLevel, oldLikeVal)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, activityData)
- this.role.ReplayGate(ntfMsg, true)
- if len(rewardList) > 0 {
- ackMsg := &serverproto.SCActivitiesLikabilityRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- }
- for k, v := range rewardList {
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, &serverproto.KeyValueType{Key: k, Value: v})
- }
- this.role.ReplayGate(ackMsg, true)
- }
- //系统播报
- //if addKv.ValueList[2] > 0 {
- // this.role.AddSystemMessage(SystemmessageType_Likability,
- // AddSystemMsg{ParamId: activityId,
- // ParamList: []int32{addKv.Key, addKv.ValueList[0]}})
- //}
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RoleActivity) activitiesLikabilityAddVal(likeCfgActivityData map[int32]*model.ConvertActLikabilityData,
- curLikeLevel int32, oldLikeVal, newLikeVal int32, rewardList map[int32]int32) (retLikeLevel, retLikeVal int32) {
- retLikeLevel = curLikeLevel
- retLikeVal = oldLikeVal
- likeCfgData, ok := likeCfgActivityData[curLikeLevel]
- if !ok {
- return
- }
- for idx := 0; idx < len(likeCfgData.RewardList); idx++ {
- if likeCfgData.RewardList[idx].Key <= oldLikeVal {
- continue
- }
- if likeCfgData.RewardList[idx].Key <= newLikeVal {
- rewardList[likeCfgData.RewardList[idx].ValueList[0]] += likeCfgData.RewardList[idx].ValueList[1]
- }
- }
- if likeCfgData.LikeValMax <= newLikeVal {
- _, ok := likeCfgActivityData[curLikeLevel+1]
- if !ok {
- retLikeVal = newLikeVal
- } else {
- newLikeVal = newLikeVal - likeCfgData.LikeValMax
- retLikeLevel, retLikeVal = this.activitiesLikabilityAddVal(likeCfgActivityData, curLikeLevel+1, 0, newLikeVal, rewardList)
- }
- } else {
- retLikeVal = newLikeVal
- }
- return
- }
- func (this *RoleActivity) activitiesReward100Recharge(activityId int32) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- if activityData == nil || model.ConvertAct100Recharge == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- if this.role.GetTotalRecharge() < model.ConvertAct100Recharge.RechargeAmount ||
- activityData.ParamTime <= 0 {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_REWARD_NOT
- }
- nowTime := util.GetTimeMilliseconds()
- diffDay := util.GetDurationDay2(activityData.ParamTime, nowTime)
- var maxDiffDay int32 = 3
- if diffDay < maxDiffDay {
- maxDiffDay = diffDay
- }
- //ack奖励处理
- ackMsg := &serverproto.SCActivitiesRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- ActivityId: activityId,
- }
- rewardDay := 0
- for idx := 1; idx <= int(maxDiffDay); idx++ {
- if activityData.RewardState&(1<<uint32(idx)) > 0 {
- rewardDay++
- continue
- }
- activityData.RewardState |= 1 << uint32(idx)
- rewardDay++
- switch idx {
- case 1:
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, model.ConvertAct100Recharge.Day1Reward...)
- case 2:
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, model.ConvertAct100Recharge.Day2Reward...)
- case 3:
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, model.ConvertAct100Recharge.Day3Reward...)
- }
- }
- //奖励领取完毕,活动消失(首充和百元奖励都领取完毕)
- this.checkFirstChargeAnd100RechargeEnd(rewardDay, activityData)
- if len(ackMsg.RewardItemList) > 0 {
- this.addChangeActivity(activityId, 0)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, activityData)
- this.role.ReplayGate(ntfMsg, true)
- var addItemList = map[int32]int32{}
- for idx := 0; idx < len(ackMsg.RewardItemList); idx++ {
- item := ackMsg.RewardItemList[idx]
- addItemList[item.Key] += item.Value
- }
- this.role.AddItemList(addItemList, AddFrom_Activities, true)
- this.role.ReplayGate(ackMsg, true)
- this.SetDirty(true)
- return serverproto.ErrorCode_ERROR_OK
- }
- return serverproto.ErrorCode_ERROR_ACTIVITIES_REWARD_NOT
- }
- func (this *RoleActivity) checkFirstChargeAnd100RechargeEnd(reward100Count int, reward100Data *serverproto.ActivitiesDetailData) {
- firstRewardCount := 0
- for idx := 1; idx <= 3; idx++ {
- if this.firstChargeRewardStat&(1<<uint32(idx)) > 0 {
- firstRewardCount++
- continue
- }
- }
- bNotify := false
- if reward100Data == nil {
- reward100Count = 0
- for _, val := range this.activityDataList {
- if val.ActivitiesType == int32(serverproto.EActivityType_EActivityType_100Recharge) {
- for idx := 1; idx <= 3; idx++ {
- if val.RewardState&(1<<uint32(idx)) > 0 {
- reward100Count++
- continue
- }
- }
- bNotify = true
- reward100Data = val
- break
- }
- }
- }
- //奖励领取完毕,活动消失(首充和百元奖励都领取完毕)
- if firstRewardCount == reward100Count && firstRewardCount == 3 {
- this.SetDirty(true)
- if reward100Data != nil {
- reward100Data.EndTime = util.GetTimeMilliseconds()
- this.addChangeActivity(reward100Data.ActivitiesId, 0)
- }
- if bNotify {
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, reward100Data)
- this.role.ReplayGate(ntfMsg, true)
- }
- }
- }
- func (this *RoleActivity) activitiesRewardDailyCumRecharge(activityId int32) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- if this.role.GetDayRecharge() <= 0 {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_REWARD_NOT
- }
- day := activityData.CurDay
- cfgData := model.GetActTiredRechargeDb(activityData.RewardState+1, day)
- if cfgData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_REWARD_NOT
- }
- if this.role.GetDayRecharge() < float32(cfgData.Amount) {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_REWARD_NOT
- }
- activityData.RewardState++
- this.addChangeActivity(activityId, 0)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, activityData)
- this.role.ReplayGate(ntfMsg, true)
- //ack奖励处理
- ackMsg := &serverproto.SCActivitiesRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- ActivityId: activityId,
- //RewardItemList: model.ConvertActTiredRecharge[cfgData.Id],
- }
- var addItemList = map[int32]int32{}
- for idx := 0; idx < len(cfgData.Rewards); idx++ {
- item := cfgData.Rewards[idx]
- if !CheckHDItemAdd(item.Key, this.role) {
- continue
- }
- addItemList[item.Key] += item.Value
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, item)
- }
- this.role.AddItemList(addItemList, AddFrom_Activities, true)
- this.role.ReplayGate(ackMsg, true)
- this.SetDirty(true)
- return serverproto.ErrorCode_ERROR_OK
- }
- // exchangeNum 兑换次数
- func (this *RoleActivity) activitiesRewardCollection(activityId, rewardIdx int32, msg *serverproto.SSActivitiesCollectionServerDataAck, exchangeNum int32) serverproto.ErrorCode {
- if exchangeNum <= 0 {
- exchangeNum = 1
- }
- cfgData, ok := model.ConvertActCollection[rewardIdx]
- if !ok || cfgData.ActivitiesId != activityId {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- var collectData *serverproto.ActivitiesCollectionData = nil
- activityData := this.getActivityData(activityId)
- if activityData != nil {
- for idx := 0; idx < len(activityData.CollectionList); idx++ {
- if activityData.CollectionList[idx].Id == cfgData.Id {
- collectData = activityData.CollectionList[idx]
- break
- }
- }
- if collectData != nil {
- if collectData.RewardNum >= cfgData.RewardNum || collectData.RewardNum+exchangeNum > cfgData.RewardNum {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_EXCHANGE_NUM_LIMIT
- }
- }
- if !this.collectionRewardCheck(cfgData, uint64(exchangeNum)) {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_EXCHANGE_REWARD_NOT
- }
- //获取全局数据
- if msg == nil && cfgData.ServerRewardNum > 0 {
- ssMsg := &serverproto.SSActivitiesCollectionServerDataReq{
- ActivityId: activityId,
- RewardIdx: cfgData.Id,
- ServerLimitNum: cfgData.ServerRewardNum,
- }
- this.role.SendRank(ssMsg)
- return serverproto.ErrorCode_ERROR_OK
- }
- var delItemList = map[int32]int32{}
- for k, v := range cfgData.ExchangeConditionList {
- delItemList[k] += v * exchangeNum
- }
- this.role.DelItemList(delItemList, AddItemST{AddFrom: AddFrom_Activities})
- if collectData == nil {
- collectData = &serverproto.ActivitiesCollectionData{
- Id: cfgData.Id,
- RewardNum: exchangeNum,
- }
- activityData.CollectionList = append(activityData.CollectionList, collectData)
- } else {
- collectData.RewardNum += exchangeNum
- }
- //ack奖励处理
- ackMsg := &serverproto.SCActivitiesRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- ActivityId: activityId,
- }
- var addItemList = map[int32]int32{}
- for idx := 0; idx < len(cfgData.RewardList); idx++ {
- item := cfgData.RewardList[idx]
- addItemList[item.Key] += item.Value * exchangeNum
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, &serverproto.KeyValueType{
- Key: item.Key,
- Value: item.Value * exchangeNum,
- })
- }
- this.addChangeActivity(activityId, 0)
- this.role.AddItemList(addItemList, AddFrom_Activities, true)
- this.SetDirty(true)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, activityData)
- this.role.ReplayGate(ntfMsg, true)
- this.role.ReplayGate(ackMsg, true)
- //通知服务器清空全局数据(之前是全局的后面改成非全局的)
- if cfgData.ServerRewardNum == 0 {
- ssMsg := &serverproto.SSActivitiesCollectionServerDataReq{
- ActivityId: activityId,
- RewardIdx: cfgData.Id,
- }
- this.role.SendRank(ssMsg)
- }
- //通知全服玩家
- if cfgData.ServerRewardNum > 0 {
- this.role.AddSystemMessage(SystemmessageType_ActCollection,
- AddSystemMsg{ParamId: activityId, ParamCount: rewardIdx})
- if len(msg.DataList) > 0 {
- ssNtfMsg := &serverproto.SSActivitiesCollectionServerDataNtf{
- ActivityId: activityId,
- RewardIdx: rewardIdx,
- ServerCurNum: msg.DataList[0].Value,
- }
- this.role.SendSocial(ssNtfMsg)
- }
- }
- } else if msg != nil {
- var addItemList = map[int32]int32{}
- for idx := 0; idx < len(cfgData.RewardList); idx++ {
- item := cfgData.RewardList[idx]
- addItemList[item.Key] += item.Value
- }
- var delItemList = map[int32]int32{}
- for k, v := range cfgData.ExchangeConditionList {
- delItemList[k] += v * exchangeNum
- }
- this.role.DelItemList(delItemList, AddItemST{AddFrom: AddFrom_Activities})
- this.role.AddItemList(addItemList, AddFrom_Activities, true)
- //ack奖励处理
- ackMsg := &serverproto.SCActivitiesRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- ActivityId: activityId,
- RewardItemList: cfgData.RewardList,
- }
- this.role.ReplayGate(ackMsg, true)
- }
- return serverproto.ErrorCode_ERROR_OK
- }
- // 集字奖励条件判断
- func (this *RoleActivity) collectionRewardCheck(cfgData *model.ConvertActCollectionData, exchangeNum uint64) bool {
- for key, val := range cfgData.ExchangeConditionList {
- if key <= 0 || val <= 0 {
- continue
- }
- if this.role.GetResNum(key) < uint64(val)*exchangeNum {
- return false
- }
- }
- return true
- }
- // 全局数据奖励处理
- func (this *RoleActivity) OnCollectionRewardByServer(msg *serverproto.SSActivitiesCollectionServerDataAck) {
- if msg.RewardIdx > 0 {
- cfgData, ok := model.ConvertActCollection[msg.RewardIdx]
- if !ok || cfgData.ActivitiesId != msg.ActivityId {
- ackMsg := &serverproto.SCActivitiesRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_ACTIVITIES_EXCHANGE_REWARD_NOT),
- ActivityId: msg.ActivityId,
- }
- this.role.ReplayGate(ackMsg, true)
- return
- }
- if len(msg.DataList) > 0 {
- if msg.DataList[0].Value > cfgData.ServerRewardNum {
- ackMsg := &serverproto.SCActivitiesRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_ACTIVITIES_EXCHANGE_NUM_LIMIT),
- ActivityId: msg.ActivityId,
- }
- this.role.ReplayGate(ackMsg, true)
- return
- }
- } else {
- ackMsg := &serverproto.SCActivitiesRewardAck{
- Error: msg.Error,
- ActivityId: msg.ActivityId,
- }
- this.role.ReplayGate(ackMsg, true)
- return
- }
- //活动过期也需要获取奖励
- this.activitiesRewardCollection(msg.ActivityId, msg.RewardIdx, msg, 1)
- } else {
- ackMsg := &serverproto.SCActivitiesCollectionServerDataAck{
- Error: msg.Error,
- ActivityId: msg.ActivityId,
- DataList: msg.DataList,
- }
- this.role.ReplayGate(ackMsg, true)
- }
- }
- // 获取超值礼包商品信息
- func (this *RoleActivity) PayInfoGetDiscount(payRewardInfo *serverproto.PayOrderSaveInfo) bool {
- if len(this.superUnlockChargeList) <= 0 {
- return false
- }
- nowTime := util.GetTimeMilliseconds()
- bChange := false
- for idx := 0; idx < len(this.superUnlockChargeList); {
- unlockData := this.superUnlockChargeList[idx]
- if unlockData.EndTime <= nowTime {
- this.superUnlockChargeList = append(this.superUnlockChargeList[:idx], this.superUnlockChargeList[idx+1:]...)
- bChange = true
- continue
- }
- if unlockData.ActivitiesId == payRewardInfo.GoodsId {
- cfgData, ok := model.ConvertActDiscountsRecharge[unlockData.ActivitiesId]
- if !ok {
- break
- }
- payRewardInfo.Count = 1
- payRewardInfo.GoodsId = unlockData.ActivitiesId
- payRewardInfo.Amount = cfgData.Amount
- payRewardInfo.GoodsName = cfgData.Name
- payRewardInfo.RewardList = cfgData.RewardList
- break
- }
- idx++
- }
- if bChange {
- this.SetDirty(true)
- ntfMsg := &serverproto.SCActivitiesDiscountsNtf{
- DiscountDataList: this.superUnlockChargeList,
- }
- this.role.ReplayGate(ntfMsg, true)
- }
- if payRewardInfo.Count > 0 {
- return true
- }
- return false
- }
- func (this *RoleActivity) OnPayInfoGetDiscount(payRewardInfo *serverproto.PayOrderSaveInfo) {
- bFind := false
- for idx := 0; idx < len(this.superUnlockChargeList); idx++ {
- if this.superUnlockChargeList[idx].ActivitiesId == payRewardInfo.GoodsId {
- this.superUnlockChargeList = append(this.superUnlockChargeList[:idx], this.superUnlockChargeList[idx+1:]...)
- bFind = true
- break
- }
- }
- if bFind {
- this.SetDirty(true)
- ntfMsg := &serverproto.SCActivitiesDiscountsNtf{
- DiscountDataList: this.superUnlockChargeList,
- }
- this.role.ReplayGate(ntfMsg, true)
- }
- }
- func (this *RoleActivity) refreshDiscountData(nowTime uint64) bool {
- bChange := false
- for idx := 0; idx < len(this.superUnlockChargeList); {
- unlockData := this.superUnlockChargeList[idx]
- if unlockData.EndTime <= nowTime {
- this.superUnlockChargeList = append(this.superUnlockChargeList[:idx], this.superUnlockChargeList[idx+1:]...)
- this.SetDirty(true)
- bChange = true
- continue
- }
- idx++
- }
- return bChange
- }
- func (this *RoleActivity) OnRewardByServer(msg *serverproto.SSActivitiesCollectionServerDataAck) {
- activityType := this.GetActivityType(msg.ActivityId)
- if activityType == int32(serverproto.EActivityType_EActivityType_Pet_Exchange) {
- this.OnExchangeRewardByServer(msg)
- } else {
- this.OnCollectionRewardByServer(msg)
- }
- }
- func (this *RoleActivity) GetActivityType(activityId int32) int32 {
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- return 0
- }
- return activityData.ActivitiesType
- }
- // 兑换奖励
- func (this *RoleActivity) OnExchangeRewardByServer(msg *serverproto.SSActivitiesCollectionServerDataAck) {
- if msg.RewardIdx > 0 {
- cfgData, ok := model.ConvertExchange[msg.RewardIdx]
- if !ok || cfgData.ActivitiesId != msg.ActivityId {
- ackMsg := &serverproto.SCActivitiesExchangeAck{
- Error: int32(serverproto.ErrorCode_ERROR_ACTIVITIES_EXCHANGE_REWARD_NOT),
- ActivityId: msg.ActivityId,
- RewardIdx: msg.RewardIdx,
- }
- this.role.ReplayGate(ackMsg, true)
- return
- }
- if len(msg.DataList) > 0 {
- if msg.DataList[0].Value > cfgData.ServerRewardNum {
- ackMsg := &serverproto.SCActivitiesExchangeAck{
- Error: int32(serverproto.ErrorCode_ERROR_ACTIVITIES_EXCHANGE_NUM_LIMIT),
- ActivityId: msg.ActivityId,
- RewardIdx: msg.RewardIdx,
- }
- this.role.ReplayGate(ackMsg, true)
- //全服兑换次数用尽
- util.ErrorF("uid=%v check exchange failed, server num run out petId:=%v", this.role.GetUUid(), msg.DataList[0].Value, cfgData.ServerRewardNum)
- return
- }
- } else {
- ackMsg := &serverproto.SCActivitiesExchangeAck{
- Error: msg.Error,
- ActivityId: msg.ActivityId,
- RewardIdx: msg.RewardIdx,
- }
- this.role.ReplayGate(ackMsg, true)
- return
- }
- util.InfoF("uid=%v exchange pet begin", this.role.GetUUid())
- //活动过期也需要获取奖励
- ret := this.ActivitiesExchange(nil, msg)
- if ret != serverproto.ErrorCode_ERROR_OK {
- ackMsg := &serverproto.SCActivitiesExchangeAck{
- ActivityId: msg.ActivityId,
- RewardIdx: msg.RewardIdx,
- Error: int32(ret),
- }
- this.role.ReplayGate(ackMsg, true)
- }
- } else {
- ackMsg := &serverproto.SCActivitiesCollectionServerDataAck{
- Error: msg.Error,
- ActivityId: msg.ActivityId,
- DataList: msg.DataList,
- }
- this.role.ReplayGate(ackMsg, true)
- }
- }
- func (this *RoleActivity) CheckPetCondition(condType int32, condition *model.ExchangePetCondition, petList *serverproto.ExchangeInfo, delPetData []*serverproto.KeyValueType) serverproto.ErrorCode {
- if petList == nil || condition == nil || len(petList.CostItem) <= 0 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- for _, data := range petList.CostItem {
- petData := this.role.GetRolePet().getPet(uint32(data.Key))
- if petData == nil {
- util.ErrorF("uid=%v check exchange failed, pet not found petId:=%v", this.role.GetUUid(), data.Key)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- petCfg, ok := serverproto.PetCfgLoader[petData.ConfigId]
- if !ok {
- util.ErrorF("uid=%v check exchange failed, pet config not found petId:=%v, configId;=%v", this.role.GetUUid(), data.Key, petData.ConfigId)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- totalSkillLevel := int32(0)
- //宠物品质
- if condType == model.Exchange_Type_Common {
- if petCfg.Quality != condition.Id {
- util.ErrorF("uid=%v check exchange quality failed petId:=%v, configId;=%v", this.role.GetUUid(), data.Key, petData.ConfigId)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- } else if condType == model.Exchange_Type_Special {
- if petCfg.Id != condition.Id {
- util.ErrorF("uid=%v check exchange config_id failed petId:=%v, configId;=%v", this.role.GetUUid(), data.Key, petData.ConfigId)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- }
- //宠物等级不满足
- if petData.Level < condition.Level {
- util.ErrorF("uid=%v check exchange level failed petId:=%v, configId;=%v leve:%v needlevel:=%V", this.role.GetUUid(), data.Key, petData.ConfigId, petData.Level, condition.Level)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- for _, skill := range petData.SkillList {
- totalSkillLevel += skill.Level
- }
- if totalSkillLevel < condition.SkillLevel {
- util.ErrorF("uid=%v check exchange skillLevel failed petId:=%v, configId;=%v leve:%v needlevel:=%V", this.role.GetUUid(), data.Key, petData.ConfigId, totalSkillLevel, condition.SkillLevel)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- delPetData = append(delPetData, &serverproto.KeyValueType{
- Key: data.Key,
- Value: petData.ConfigId,
- })
- }
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RoleActivity) petExchangeCheck(usePetList []*serverproto.ExchangeInfo, cfgData *model.ConvertExchangeData) serverproto.ErrorCode {
- if usePetList == nil || cfgData == nil {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- delPetData := []*serverproto.KeyValueType{}
- //遍历每个条件,
- for _, condition := range cfgData.ConditionPet {
- bRet := serverproto.ErrorCode_ERROR_FAIL
- for _, data := range usePetList {
- if condition.ConditionId == data.ConditionId {
- if condition.CondType == model.Exchange_Type_Special {
- bRet = this.CheckPetCondition(model.Exchange_Type_Special, condition, data, delPetData)
- } else if condition.CondType == model.Exchange_Type_Common {
- bRet = this.CheckPetCondition(model.Exchange_Type_Common, condition, data, delPetData)
- }
- break
- }
- }
- if bRet != serverproto.ErrorCode_ERROR_OK {
- return bRet
- }
- }
- //检查是否有重复的宠物
- petList := make(map[uint32]int32)
- for _, pet := range usePetList {
- for _, data := range pet.CostItem {
- //如果发现一个PET用了两次,说明调用了外挂了
- count := petList[uint32(data.Key)]
- if count >= 2 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- petList[uint32(data.Key)] += 1
- }
- }
- util.InfoF("uid=%v check pet condition ok petListInfo = %v", this.role.GetUUid(), delPetData)
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RoleActivity) CheckCardCondition(condType int32, condition *model.ExchangeCardCondition, petList *serverproto.ExchangeInfo) serverproto.ErrorCode {
- if petList == nil || condition == nil || len(petList.CostItem) <= 0 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- totalCardNum := int32(0)
- for _, data := range petList.CostItem {
- if condType == model.Exchange_Type_Common {
- cardCfg, ok := serverproto.CardCfgLoader[data.Key]
- if !ok {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- if cardCfg.CardType != condition.ItemQuality { //卡片品质对比
- util.ErrorF("uid=%v check exchange quality failed petId:=%v, configId;=%v", this.role.GetUUid(), data.Key, cardCfg.CardId)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- /*
- if cardCfg.CardLevel != condition.ItemLevel { //卡片品质对比
- util.ErrorF("uid=%v check exchange quality failed petId:=%v, configId;=%v", this.role.GetUUid(), data.Key, cardCfg.CardId)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- */
- //选择库校验
- if len(condition.Scope) <= 0 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- _, ok2 := condition.Scope[data.Key]
- if !ok2 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- cardNum := this.role.GetRoleCard().GetCardNum(data.Key)
- if cardNum < data.Value {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- totalCardNum += data.Value
- } else if condType == model.Exchange_Type_Special { //special的道具单独判定数量够不够。
- if condition.ItemType == int32(serverproto.ResType_Res_Card) {
- cardCfg, ok := serverproto.CardCfgLoader[data.Key]
- if !ok {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- if cardCfg.CardId != condition.ItemId { //卡片ID对比
- util.ErrorF("uid=%v check exchange config_id failed petId:=%v, configId;=%v", this.role.GetUUid(), data.Key, cardCfg.CardId)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- cardNum := this.role.GetRoleCard().GetCardNum(data.Key)
- if cardNum < data.Value || cardNum < condition.ItemCount {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- } else if condition.ItemType == int32(serverproto.ResType_Res_Item) || condition.ItemType == int32(serverproto.ResType_Res_Gift) {
- resNum := this.role.GetResNum(condition.ItemId)
- if resNum < uint64(condition.ItemCount) || resNum < uint64(data.Value) {
- util.ErrorF("uid=%v check exchange config_id failed petId:=%v, configId;=%v", this.role.GetUUid(), data.Key, condition.ItemId)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- }
- }
- }
- //common目前只支持卡片。
- if condType == model.Exchange_Type_Common && totalCardNum < condition.ItemCount {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RoleActivity) OtherExchangeCheck(useItemList []*serverproto.ExchangeInfo, cfgData *model.ConvertExchangeData) serverproto.ErrorCode {
- if useItemList == nil || cfgData == nil {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- // delPetData := []*serverproto.KeyValueType{}
- //遍历每个条件,
- for _, condition := range cfgData.ConditionCard {
- bRet := serverproto.ErrorCode_ERROR_FAIL
- for _, data := range useItemList {
- if condition.ConditionId == data.ConditionId {
- if condition.CondType == model.Exchange_Type_Special || condition.CondType == model.Exchange_Type_Common {
- bRet = this.CheckCardCondition(condition.CondType, condition, data)
- }
- break
- }
- }
- if bRet != serverproto.ErrorCode_ERROR_OK {
- return bRet
- }
- }
- util.InfoF("uid=%v check pet condition ok petListInfo", this.role.GetUUid())
- return serverproto.ErrorCode_ERROR_OK
- }
- // 扣除宠物兑换道具
- func (this *RoleActivity) DelPetExchangeItem(useItemList []*serverproto.ExchangeInfo) serverproto.ErrorCode {
- if len(useItemList) <= 0 {
- util.ErrorF("uid=%v del pet error useItemList is nil:", this.role.GetUUid())
- return serverproto.ErrorCode_ERROR_FAIL
- }
- //删除消耗的宠物
- var delPetList []uint32
- for _, condition := range useItemList {
- for _, data := range condition.CostItem {
- costPet := this.role.GetRolePet().getPet(uint32(data.Key))
- //上阵宠物和契约宠物无法作为兑换材料
- if costPet == nil || costPet.HeroId > 0 || costPet.QiyueHeroId > 0 {
- util.ErrorF("uid=%v del pet error costPet:%v :", this.role.GetUUid(), costPet)
- return serverproto.ErrorCode_ERROR_FAIL
- }
- delPetList = append(delPetList, uint32(data.Key))
- this.role.GetRolePet().dbChangePetList.Add(uint32(data.Key))
- }
- }
- this.role.GetRolePet().delPetList(delPetList)
- this.role.GetRolePet().petChangeNtf(nil, delPetList, nil, true)
- //删除宠物后查看援助是否有变化
- for _, petId := range delPetList {
- if this.role.GetRolePet().isInAssist(petId, true) {
- this.role.GetRolePet().saveAssist()
- }
- }
- this.role.GetRolePet().SetDirty(true)
- return serverproto.ErrorCode_ERROR_OK
- }
- // 扣除卡片兑换道具
- func (this *RoleActivity) DelCardExchangeItem(useItemList []*serverproto.ExchangeInfo) serverproto.ErrorCode {
- if len(useItemList) <= 0 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- //删除消耗的道具
- costItemList := map[int32]int32{}
- for _, condition := range useItemList {
- for _, data := range condition.CostItem {
- itemCfg, ok := serverproto.ItemCfgLoader[data.Key]
- if !ok {
- continue
- }
- if itemCfg.ResType == 9 {
- this.role.GetRoleCard().ReduceCard(data.Key, data.Value, true)
- } else {
- costItemList[data.Key] += data.Value
- }
- }
- }
- if len(costItemList) > 0 {
- this.role.DelItemList(costItemList, AddItemST{AddFrom: AddFrom_Activities})
- }
- this.role.GetRolePet().SetDirty(true)
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RoleActivity) ActivitiesExchange(reqMsg *serverproto.CSActivitiesExchangeReq, msg *serverproto.SSActivitiesCollectionServerDataAck) serverproto.ErrorCode {
- if reqMsg == nil && msg == nil {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- rewardIdx := int32(0)
- activityId := int32(0)
- var useItemList []*serverproto.ExchangeInfo
- if reqMsg != nil {
- rewardIdx = reqMsg.RewardIdx
- activityId = reqMsg.ActivityId
- useItemList = reqMsg.Data
- } else {
- rewardIdx = msg.RewardIdx
- activityId = msg.ActivityId
- useItemList = msg.PetData
- }
- cfgData, ok := model.ConvertExchange[rewardIdx]
- if !ok || cfgData.ActivitiesId != activityId {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- if cfgData.ActivitiesType == model.Exchange_Activity_Type_Pet && len(cfgData.ConditionPet) <= 0 ||
- cfgData.ActivitiesType == model.Exchange_Activity_Type_Card && len(cfgData.ConditionCard) <= 0 {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- var exchangeData *serverproto.ExchangeData = nil
- activityData := this.getActivityData(activityId)
- if activityData != nil {
- for idx := 0; idx < len(activityData.ExchangeList); idx++ {
- if activityData.ExchangeList[idx].Id == cfgData.Id {
- exchangeData = activityData.ExchangeList[idx]
- break
- }
- }
- if exchangeData != nil && exchangeData.ExchangeNum >= cfgData.RewardNum {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_EXCHANGE_NUM_LIMIT
- }
- //校验发过来的ID是否有重复//数量是否够//有重复说明有问题
- bRet := serverproto.ErrorCode_ERROR_FAIL
- if cfgData.ActivitiesType == model.Exchange_Activity_Type_Pet {
- bRet = this.petExchangeCheck(useItemList, cfgData)
- } else if cfgData.ActivitiesType == model.Exchange_Activity_Type_Card {
- bRet = this.OtherExchangeCheck(useItemList, cfgData)
- }
- if bRet != serverproto.ErrorCode_ERROR_OK {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_EXCHANGE_REWARD_NOT
- }
- //获取全局数据if msg == nil && cfgData.ServerRewardNum > 0 {
- if msg == nil && cfgData.ServerRewardNum > 0 {
- ssMsg := &serverproto.SSActivitiesCollectionServerDataReq{
- ActivityId: activityId,
- RewardIdx: cfgData.Id,
- ServerLimitNum: cfgData.ServerRewardNum,
- PetData: useItemList,
- }
- this.role.SendRank(ssMsg)
- return serverproto.ErrorCode_ERROR_OK
- }
- //删除消耗的物品
- bRet = serverproto.ErrorCode_ERROR_FAIL
- if cfgData.ActivitiesType == model.Exchange_Activity_Type_Pet {
- bRet = this.DelPetExchangeItem(useItemList)
- } else if cfgData.ActivitiesType == model.Exchange_Activity_Type_Card {
- bRet = this.DelCardExchangeItem(useItemList)
- }
- if bRet != serverproto.ErrorCode_ERROR_OK {
- return 100009
- }
- //ack奖励处理
- ackMsg := &serverproto.SCActivitiesExchangeAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- ActivityId: activityId,
- RewardIdx: rewardIdx,
- }
- //兑换计数
- if exchangeData == nil {
- exchangeData = &serverproto.ExchangeData{
- Id: cfgData.Id,
- ExchangeNum: 1,
- }
- activityData.ExchangeList = append(activityData.ExchangeList, exchangeData)
- } else {
- exchangeData.ExchangeNum += 1
- }
- ackMsg.ExchangeTime = exchangeData.ExchangeNum
- //奖励宠物
- var addItemList = map[int32]int32{}
- for _, reward := range cfgData.Reward {
- addItemList[reward.Key] += reward.Value
- }
- this.role.AddItemList(addItemList, AddFrom_Activities, true)
- this.addChangeActivity(activityId, 0)
- this.SetDirty(true)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, activityData)
- this.role.ReplayGate(ntfMsg, true)
- this.role.ReplayGate(ackMsg, true)
- //通知服务器清空全局数据(之前是全局的后面改成非全局的)
- if cfgData.ServerRewardNum == 0 {
- ssMsg := &serverproto.SSActivitiesCollectionServerDataReq{
- ActivityId: activityId,
- RewardIdx: cfgData.Id,
- }
- this.role.SendRank(ssMsg)
- }
- //通知全服玩家
- if msg != nil && cfgData.ServerRewardNum > 0 {
- if len(msg.DataList) > 0 {
- ssNtfMsg := &serverproto.SSActivitiesCollectionServerDataNtf{
- ActivityId: activityId,
- RewardIdx: rewardIdx,
- ServerCurNum: msg.DataList[0].Value,
- }
- this.role.SendSocial(ssNtfMsg)
- }
- }
- if cfgData.BroadCast == 1 {
- this.role.AddSystemMessage(SystemmessageType_PetExchange,
- AddSystemMsg{ParamId: activityId, ParamCount: rewardIdx})
- }
- util.InfoF("uid=%v operator exchange pet success", this.role.GetUUid())
- } else if msg != nil { //活动数据找不到的情况下,有可能已经结束了,还在兑换的流程继续走下去。
- //删除道具单独封装
- //删除消耗的物品
- bRet := serverproto.ErrorCode_ERROR_FAIL
- if cfgData.ActivitiesType == model.Exchange_Activity_Type_Pet {
- bRet = this.DelPetExchangeItem(msg.PetData)
- } else if cfgData.ActivitiesType == model.Exchange_Activity_Type_Card {
- bRet = this.DelCardExchangeItem(msg.PetData)
- }
- if bRet != serverproto.ErrorCode_ERROR_OK {
- return bRet
- }
- //奖励宠物
- var addItemList = map[int32]int32{}
- for _, reward := range cfgData.Reward {
- addItemList[reward.Key] += reward.Value
- }
- this.role.AddItemList(addItemList, AddFrom_Activities, true)
- //ack奖励处理
- ackMsg := &serverproto.SCActivitiesExchangeAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- ActivityId: msg.ActivityId,
- RewardIdx: msg.RewardIdx,
- }
- this.role.ReplayGate(ackMsg, true)
- this.role.GetRolePet().SetDirty(true)
- util.InfoF("uid=%v operator exchange pet success", this.role.GetUUid())
- }
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RoleActivity) activityWheelInit(activityData *serverproto.ActivitiesDetailData) {
- if activityData.WheelData == nil {
- activityData.WheelData = &serverproto.ActivityWheelData{}
- }
- if len(activityData.WheelData.WheelRewardItemList) <= 0 {
- convertWheelData, ok := model.ConvertActivityPrizeWheelData[activityData.ActivitiesId]
- if !ok {
- util.ErrorF("uid=%v activityWheelInit cfgData not exist activityId=%v", this.role.GetUUid(), activityData.ActivitiesId)
- return
- }
- templateIdx := convertWheelData.GenWheelReward(&activityData.WheelData.WheelRewardItemList)
- activityData.WheelData.TemplateIdx = templateIdx
- util.InfoF("uid=%v activityWheelInit templateIdx=%v rewardList=%v", templateIdx, activityData.WheelData.WheelRewardItemList)
- }
- }
- // 活动转盘
- func (this *RoleActivity) ActivityWheelRefresh(activityId int32) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- //数据不合法再次初始化
- if activityData.WheelData == nil {
- this.activityWheelInit(activityData)
- this.addChangeActivity(activityId, 0)
- this.SetDirty(true)
- }
- if activityData.WheelData.WheelOpen {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_WHEEL_OPEN
- }
- convertWheelData, ok := model.ConvertActivityPrizeWheelData[activityId]
- if !ok {
- util.ErrorF("uid=%v ActivityWheelRefresh cfgData not exist activityId=%v", this.role.GetUUid(), activityId)
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- var refreshCostMoney int32 = 0
- refreshLen := len(convertWheelData.RefreshCostMoney)
- if refreshLen > 0 {
- if activityData.WheelData.WheelRefreshNum >= int32(refreshLen) {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_WHEEL_REFRESH_LIMIT
- } else {
- refreshCostMoney = convertWheelData.RefreshCostMoney[int(activityData.WheelData.WheelRefreshNum)]
- }
- }
- if refreshCostMoney > 0 {
- if !this.role.roleBag.CanDelItem(int32(serverproto.ResType_Res_ROCoin), refreshCostMoney) {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_WHEEL_MONEY_NOT
- }
- this.role.DelItem(int32(serverproto.ResType_Res_ROCoin), refreshCostMoney, AddItemST{
- AddFrom: AddFrom_Activities,
- })
- }
- activityData.WheelData.WheelRefreshNum++
- //重新刷新转盘奖励
- activityData.WheelData.WheelRewardItemList = activityData.WheelData.WheelRewardItemList[:0]
- templateIdx := convertWheelData.GenWheelReward(&activityData.WheelData.WheelRewardItemList)
- activityData.WheelData.TemplateIdx = templateIdx
- this.SetDirty(true)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, activityData)
- this.role.ReplayGate(ntfMsg, true)
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RoleActivity) ActivityWheelOpen(activityId int32) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- if activityData == nil || activityData.WheelData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- if activityData.WheelData.WheelOpen {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_WHEEL_OPEN
- }
- activityData.WheelData.WheelRefreshNum = 0 //刷新次数重置
- activityData.WheelData.WheelNum = 0
- activityData.WheelData.WheelOpen = true
- this.addChangeActivity(activityId, 0)
- this.SetDirty(true)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, activityData)
- this.role.ReplayGate(ntfMsg, true)
- return serverproto.ErrorCode_ERROR_OK
- }
- // rewardAll false:转一次 true:获取所有奖励
- func (this *RoleActivity) ActivityWheelReward(activityId int32, rewardAll bool) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- if activityData == nil || activityData.WheelData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- wheelData := activityData.WheelData
- convertWheelData, ok := model.ConvertActivityPrizeWheelData[activityId]
- if !ok {
- util.ErrorF("uid=%v ActivityWheelRefresh cfgData not exist activityId=%v", this.role.GetUUid(), activityId)
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- var addLogList []*serverproto.WheelLogData
- if rewardAll {
- for idx := 0; idx < len(wheelData.WheelRewardItemList); idx++ {
- if wheelData.WheelRewardItemList[idx].HasReward {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_WHEEL_REWARDALL_NOT
- }
- }
- //消耗是否足够(道具,金币)
- tmpCostItem := convertWheelData.WheelAllCostItem
- if this.role.roleBag.CanDelItem(tmpCostItem.Key, tmpCostItem.Val) {
- this.role.DelItem(tmpCostItem.Key, tmpCostItem.Val, AddItemST{
- AddFrom: AddFrom_Activities,
- })
- } else if this.role.roleBag.CanDelItem(int32(serverproto.ResType_Res_ROCoin), tmpCostItem.Money) {
- this.role.DelItem(int32(serverproto.ResType_Res_ROCoin), tmpCostItem.Money, AddItemST{
- AddFrom: AddFrom_Activities,
- })
- util.InfoF("uid:%v get wheel cost:%v", this.role.GetUUid(), tmpCostItem.Money)
- } else {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_WHEEL_MONEY_NOT
- }
- //添加积分
- this.role.GetRoleCompetition().CompetitionAddScoreDuoBao(tmpCostItem.Score)
- wheelData.WheelNum = int32(len(wheelData.WheelRewardItemList))
- this.SetDirty(true)
- //获取奖励
- ackMsg := &serverproto.SCActivityWheelRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- RewardAll: rewardAll,
- }
- var logData *serverproto.WheelLogData = nil
- rewardList := map[int32]int32{}
- for idx := 0; idx < len(wheelData.WheelRewardItemList); idx++ {
- wheelData.WheelRewardItemList[idx].HasReward = true
- rewardList[wheelData.WheelRewardItemList[idx].ItemId] += wheelData.WheelRewardItemList[idx].ItemNum
- ackMsg.RewardList = append(ackMsg.RewardList, wheelData.WheelRewardItemList[idx])
- //大奖日志
- if wheelData.WheelRewardItemList[idx].RewardType == model.WheelRewardType_MVp {
- if logData == nil {
- logData = &serverproto.WheelLogData{
- LogTime: util.GetTimeMilliseconds(),
- NickName: this.role.GetNickName(),
- Uid: this.role.GetUUid(),
- }
- }
- logData.ItemList = append(logData.ItemList, &serverproto.KeyValueType{
- Key: wheelData.WheelRewardItemList[idx].ItemId,
- Value: wheelData.WheelRewardItemList[idx].ItemNum,
- })
- }
- }
- this.role.AddItemList(rewardList, AddFrom_Activities, true)
- //大奖日志
- if logData != nil {
- addLogList = append(addLogList, logData)
- wheelData.LogList = append(wheelData.LogList, logData)
- }
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, activityData)
- this.role.ReplayGate(ntfMsg, true)
- this.role.ReplayGate(ackMsg, true)
- } else {
- if wheelData.WheelNum >= int32(len(wheelData.WheelRewardItemList)) ||
- len(wheelData.WheelRewardItemList) <= 0 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- var costItemList = map[int32]int32{}
- costItem := convertWheelData.WheelCostItem[int(wheelData.WheelNum)]
- curBagCostItemNum := int32(this.role.GetItemNum(costItem.Key))
- if curBagCostItemNum < costItem.Val {
- deltaMoney := (costItem.Val - curBagCostItemNum) * convertWheelData.ItemToMoney
- if !this.role.roleBag.CanDelItem(int32(serverproto.ResType_Res_ROCoin), deltaMoney) {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_WHEEL_MONEY_NOT
- }
- costItemList[int32(serverproto.ResType_Res_ROCoin)] += deltaMoney
- util.InfoF("uid:%v get wheel cost:%v", this.role.GetUUid(), deltaMoney)
- costItemList[costItem.Key] += curBagCostItemNum
- } else {
- costItemList[costItem.Key] += costItem.Val
- }
- retCode, retRewardItem := this.wheelItem(wheelData, convertWheelData)
- if retCode == serverproto.ErrorCode_ERROR_OK {
- wheelData.WheelNum++
- wheelData.WheelIdx = retRewardItem.ItemIdx
- this.SetDirty(true)
- //消耗道具
- this.role.DelItemList(costItemList, AddItemST{
- AddFrom: AddFrom_Activities,
- })
- //抽奖奖励
- this.role.roleBag.AddItem(retRewardItem.ItemId, retRewardItem.ItemNum, AddItemST{
- AddFrom: AddFrom_Activities,
- Notify: true,
- })
- util.InfoF("uid=%v retRewardItem=%v", this.role.GetUUid(), retRewardItem)
- //大奖日志
- if retRewardItem.RewardType == model.WheelRewardType_MVp {
- logData := &serverproto.WheelLogData{
- LogTime: util.GetTimeMilliseconds(),
- NickName: this.role.GetNickName(),
- Uid: this.role.GetUUid(),
- }
- logData.ItemList = append(logData.ItemList, &serverproto.KeyValueType{
- Key: retRewardItem.ItemId,
- Value: retRewardItem.ItemNum,
- })
- addLogList = append(addLogList, logData)
- wheelData.LogList = append(wheelData.LogList, logData)
- }
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, activityData)
- this.role.ReplayGate(ntfMsg, true)
- ackMsg := &serverproto.SCActivityWheelRewardAck{
- RewardAll: rewardAll,
- }
- ackMsg.RewardList = append(ackMsg.RewardList, retRewardItem)
- this.role.ReplayGate(ackMsg, true)
- }
- }
- this.addChangeActivity(activityId, 0)
- if len(addLogList) > 0 {
- //系统消息
- ssMsgNtf := &serverproto.SSSystemMessageNtf{}
- for idx := 0; idx < len(addLogList); idx++ {
- sysMsgData := &serverproto.SystemMessage{
- Type: int32(SystemmessageType_ActivityWheel),
- NickName: this.role.GetNickName(),
- SendTime: util.GetTimeMilliseconds(),
- ParamId: []int32{activityId},
- }
- for k := 0; k < len(addLogList[idx].ItemList); k++ {
- sysMsgData.ParamId = append(sysMsgData.ParamId, addLogList[idx].ItemList[k].Key)
- sysMsgData.ParamId = append(sysMsgData.ParamId, addLogList[idx].ItemList[k].Value)
- }
- ssMsgNtf.SysMsg = append(ssMsgNtf.SysMsg, sysMsgData)
- }
- this.role.SendSocial(ssMsgNtf)
- }
- return serverproto.ErrorCode_ERROR_OK
- }
- // 抽取其中一个道具
- func (this *RoleActivity) wheelItem(wheelData *serverproto.ActivityWheelData, convertData *model.ConvertPrizeWheelInfo) (serverproto.ErrorCode, *serverproto.WheelRewardItemInfo) {
- var randRewardList []serverproto.KeyValueType //[weight,rewardidx]
- var rewardTotalWeight int32 = 0
- templateData := convertData.GetTemplateData(wheelData.TemplateIdx)
- if templateData == nil {
- return serverproto.ErrorCode_ERROR_FAIL, nil
- }
- for idx := 0; idx < len(wheelData.WheelRewardItemList); idx++ {
- if wheelData.WheelRewardItemList[idx].HasReward {
- continue
- }
- if wheelData.WheelRewardItemList[idx].RewardType == model.WheelRewardType_MVp {
- if wheelData.WheelNum >= int32(len(templateData.MvpFactorList)) {
- continue
- }
- rewardTotalWeight += templateData.MvpFactorList[wheelData.WheelNum]
- } else {
- rewardType := wheelData.WheelRewardItemList[idx].RewardType
- rewardTotalWeight += templateData.RewardFactorList[int(rewardType)]
- }
- randRewardList = append(randRewardList, serverproto.KeyValueType{
- Key: rewardTotalWeight,
- Value: int32(idx),
- })
- }
- if rewardTotalWeight <= 0 {
- return serverproto.ErrorCode_ERROR_FAIL, nil
- }
- var retRewardIdx = 0
- rand.Seed(int64(util.GetTimeMilliseconds()))
- randWeight := rand.Int31n(rewardTotalWeight) + 1 //[1,rewardTotalWeight]
- for idx := 0; idx < len(randRewardList); idx++ {
- retRewardIdx = int(randRewardList[idx].Value)
- if randRewardList[idx].Key >= randWeight {
- break
- }
- }
- wheelData.WheelRewardItemList[retRewardIdx].HasReward = true
- this.SetDirty(true)
- return serverproto.ErrorCode_ERROR_OK, wheelData.WheelRewardItemList[retRewardIdx]
- }
- func (this *RoleActivity) ActivityWheelClose(activityId int32) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- if activityData == nil || activityData.WheelData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- convertWheelData, ok := model.ConvertActivityPrizeWheelData[activityId]
- if !ok {
- util.ErrorF("uid=%v ActivityWheelRefresh cfgData not exist activityId=%v", this.role.GetUUid(), activityId)
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- wheelData := activityData.WheelData
- if !wheelData.WheelOpen {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- if wheelData.WheelNum < convertWheelData.NoMVPRewardNum {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_WHEEL_CANNOT_CLOSE
- }
- wheelData.WheelOpen = false
- wheelData.WheelRefreshNum = 0
- wheelData.WheelNum = 0
- //重新刷新转盘奖励
- wheelData.WheelRewardItemList = wheelData.WheelRewardItemList[:0]
- templateIdx := convertWheelData.GenWheelReward(&wheelData.WheelRewardItemList)
- wheelData.TemplateIdx = templateIdx
- this.SetDirty(true)
- this.addChangeActivity(activityId, 0)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, activityData)
- this.role.ReplayGate(ntfMsg, true)
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RoleActivity) ActivitySummon(activityId, summonCount int32) serverproto.ErrorCode {
- retCode := serverproto.ErrorCode_ERROR_FAIL
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- retCode = serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- return retCode
- }
- tmpAckMsg := &serverproto.SCDrawCardAck{}
- for key, data := range model.ConvertSummonList {
- if data.ActivitiesId == activityId {
- retCode = this.role.GetRoleDraw().DrawReq(key, summonCount, tmpAckMsg)
- break
- }
- }
- if retCode == serverproto.ErrorCode_ERROR_OK {
- ackMsg := &serverproto.SCActivitySummonAck{
- ActivityId: activityId,
- DrawCount: tmpAckMsg.DrawCount,
- ItemList: tmpAckMsg.ItemList,
- ExtraItem: tmpAckMsg.ExtraItem,
- DrawTimes: tmpAckMsg.DrawTimes,
- AddPoint: tmpAckMsg.AddPoint,
- }
- this.role.ReplayGate(ackMsg, true)
- }
- return retCode
- }
- func (this *RoleActivity) ActivitySmashEggs(activityId, drawType, drawCount int32) (retCode serverproto.ErrorCode) {
- retCode = serverproto.ErrorCode_ERROR_FAIL
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- retCode = serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- return
- }
- tmpAckMsg := &serverproto.SCDrawCardAck{}
- var cfgData *model.SummonCost = nil
- switch drawType {
- case DrawType_EggsGold: // 金蛋
- fallthrough
- case DrawType_EggsSpecial: // 彩蛋
- for key, data := range model.ConvertSummonList {
- if data.ActivitiesId == activityId && data.SummonType == drawType {
- cfgData = data
- retCode = this.role.GetRoleDraw().DrawReq(key, drawCount, tmpAckMsg)
- break
- }
- }
- default:
- return
- }
- if retCode == serverproto.ErrorCode_ERROR_OK {
- ackMsg := &serverproto.SCActivitySmashEggsAck{
- ActivityId: activityId,
- DrawCount: tmpAckMsg.DrawCount,
- ItemList: tmpAckMsg.ItemList,
- ExtraItem: tmpAckMsg.ExtraItem,
- DrawTimes: tmpAckMsg.DrawTimes,
- AddPoint: tmpAckMsg.AddPoint,
- DrawType: drawType,
- }
- // 砸蛋消息处理
- // 大奖处理 [activityId,AddFromType,itemId,itemNum,itemId,itemNum...]
- if cfgData != nil {
- bigRewardShow := map[int32]int{}
- for idx := 0; idx < len(cfgData.BigRewardShowList); idx++ {
- bigRewardShow[cfgData.BigRewardShowList[idx]] = 1
- }
- for idx := 0; idx < len(tmpAckMsg.ItemList); idx++ {
- tmpItem := tmpAckMsg.ItemList[idx]
- if findNum, ok := bigRewardShow[tmpItem.ItemId]; ok {
- if findNum > 1 {
- continue
- }
- bigRewardShow[tmpItem.ItemId]++
- sysParam := AddSystemMsg{
- ParamId: activityId,
- AddFromType: drawType,
- }
- sysParam.ParamList = append(sysParam.ParamList, tmpAckMsg.ItemList[idx].ItemId, tmpAckMsg.ItemList[idx].ItemNum)
- addMsg := this.role.GenSystemMessage(SystemmessageType_SmashEggs, sysParam)
- this.activitySmashEggsAddSysMsg(activityData, drawType, addMsg)
- ackMsg.MsgList = append(ackMsg.MsgList, addMsg)
- }
- }
- for idx := 0; idx < len(tmpAckMsg.ExtraItem); idx++ {
- tmpItem := tmpAckMsg.ExtraItem[idx]
- findNum, ok := bigRewardShow[tmpItem.ItemId]
- if !ok || findNum > 1 { //未找到或者已经有提示
- continue
- }
- bigRewardShow[tmpItem.ItemId]++
- sysParam := AddSystemMsg{
- ParamId: activityId,
- AddFromType: drawType,
- }
- sysParam.ParamList = append(sysParam.ParamList, tmpAckMsg.ExtraItem[idx].ItemId, tmpAckMsg.ExtraItem[idx].ItemNum)
- addMsg := this.role.GenSystemMessage(SystemmessageType_SmashEggs, sysParam)
- this.activitySmashEggsAddSysMsg(activityData, drawType, addMsg)
- ackMsg.MsgList = append(ackMsg.MsgList, addMsg)
- }
- }
- this.role.ReplayGate(ackMsg, true)
- }
- return
- }
- func (this *RoleActivity) activitySmashEggsAddSysMsg(activityData *serverproto.ActivitiesDetailData, drawType int32, addMsg *serverproto.SystemMessage) {
- firstIdx := -1
- findNum := 0
- for idx := 0; idx < len(ActivitiesMag.SmashEggsMsgList); idx++ {
- tmpMsg := ActivitiesMag.SmashEggsMsgList[idx]
- if len(tmpMsg.ParamId) >= 2 && tmpMsg.ParamId[1] == drawType {
- if firstIdx < 0 {
- firstIdx = idx
- }
- findNum++
- }
- }
- if findNum >= 10 {
- ActivitiesMag.SmashEggsMsgList = append(ActivitiesMag.SmashEggsMsgList[:firstIdx], ActivitiesMag.SmashEggsMsgList[firstIdx+1:]...)
- }
- ActivitiesMag.SmashEggsMsgList = append(ActivitiesMag.SmashEggsMsgList, addMsg)
- //this.SetDirty(true)
- //this.addChangeActivity(activityData.ActivitiesId, 0)
- saveMsgNtf := &serverproto.SSActivitySmashEggsMsgSaveNtf{
- ActMsgList: ActivitiesMag.SmashEggsMsgList,
- }
- this.role.SendDb(saveMsgNtf)
- }
- func (this *RoleActivity) ActivitySmashEggsMsg(activityId, drawType int32) {
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- return
- }
- ackMsg := &serverproto.SCActivitySmashEggsMsgAck{}
- switch drawType {
- case DrawType_EggsGold:
- fallthrough
- case DrawType_EggsSpecial:
- for idx := 0; idx < len(ActivitiesMag.SmashEggsMsgList); idx++ {
- tmpMsg := ActivitiesMag.SmashEggsMsgList[idx]
- if len(tmpMsg.ParamId) >= 2 {
- if tmpMsg.ParamId[1] == drawType {
- ackMsg.ActMsgList = append(ackMsg.ActMsgList, tmpMsg)
- }
- }
- }
- }
- this.role.ReplayGate(ackMsg, true)
- }
- func (this *RoleActivity) ActivitySignIn(activityId int32, ackMsg *serverproto.SCActivitySignInAck) serverproto.ErrorCode {
- if ackMsg == nil {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- activityData := this.getActivityData(activityId)
- if activityData == nil || activityData.SignData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- /*
- if activityData.SignData == nil {
- activityData.SignData = &serverproto.ActivitySignIn{}
- }
- */
- curTime := util.GetCurrentTime()
- if activityData.SignData.NextSignTime != 0 && curTime < activityData.SignData.NextSignTime {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- //检查配置表
- signInInfo, ok := model.ConvertActivitySignIn[activityId]
- if !ok {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- signData, ok2 := signInInfo.SignData[activityData.SignData.SignDays+1]
- if !ok2 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- isDouble := false
- if signData.IsDouble == 1 {
- if signData.VipLevel <= this.role.GetRoleVipLevel() {
- isDouble = true
- }
- }
- //添加道具
- addItemList := map[int32]int32{}
- for key, value := range signData.RewardList {
- ackMsg.RewardList = append(ackMsg.RewardList, &serverproto.KeyValueType{
- Key: key,
- Value: value,
- })
- addItemList[key] += value
- if isDouble == true {
- ackMsg.ExtRewardList = append(ackMsg.ExtRewardList, &serverproto.KeyValueType{
- Key: key,
- Value: value,
- })
- addItemList[key] += value
- }
- }
- this.role.AddItemList(addItemList, AddFrom_ActivitySignIn, true)
- //设置最新的签到数据
- activityData.SignData.SignDays += 1
- ackMsg.SignDays = activityData.SignData.SignDays
- _, ok3 := signInInfo.SignData[activityData.SignData.SignDays+1]
- if !ok3 { //下一天的签到没有找到
- activityData.SignData.NextSignTime = 0
- } else {
- activityData.SignData.NextSignTime = util.GetLatest5Hour()
- }
- ackMsg.NextSignTime = activityData.SignData.NextSignTime
- this.SetDirty(true)
- this.addChangeActivity(activityId, 0)
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RoleActivity) SetActivitySignDay(day, activityId int32) {
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- return
- }
- signInInfo, ok := model.ConvertActivitySignIn[activityId]
- if !ok {
- return
- }
- _, ok2 := signInInfo.SignData[day]
- if !ok2 {
- return
- }
- activityData.SignData.SignDays = day
- activityData.SignData.NextSignTime = util.GetLatest5Hour() - 24*3600*1000
- this.SetDirty(true)
- this.addChangeActivity(activityId, 0)
- }
- func (this *RoleActivity) SetCollectNotice(activityId, CollectId int32, notice bool) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- util.InfoF("id:%v collectId:%v aaaaaa:%v", activityId, CollectId, activityData)
- if activityData == nil {
- util.InfoF("bbbbb3")
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- if activityData.ActivitiesType != int32(serverproto.EActivityType_EActivityType_ExChange) {
- util.InfoF("bbbbb2")
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- bFind := false
- for _, data := range activityData.CollectionList {
- if data.Id != CollectId {
- continue
- }
- bFind = true
- data.NoNotice = notice
- this.SetDirty(true)
- this.addChangeActivity(activityId, 0)
- return serverproto.ErrorCode_ERROR_OK
- }
- if bFind == false {
- cfgData, ok := model.ConvertActCollection[CollectId]
- if !ok || cfgData.ActivitiesId != activityId {
- util.InfoF("bbbbb:%v", cfgData)
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- collectData := &serverproto.ActivitiesCollectionData{
- Id: cfgData.Id,
- RewardNum: 0,
- NoNotice: notice,
- }
- activityData.CollectionList = append(activityData.CollectionList, collectData)
- this.SetDirty(true)
- this.addChangeActivity(activityId, 0)
- return serverproto.ErrorCode_ERROR_OK
- }
- return serverproto.ErrorCode_ERROR_FAIL
- }
- // bt RO币累计活动
- func (this *RoleActivity) getAllActivityRewardBTRoCoinRecharge(activityData *serverproto.ActivitiesDetailData) {
- if activityData.BtRocoinData == nil {
- return
- }
- var addItemList = map[int32]int32{}
- // daily
- for idx := 0; idx < len(activityData.BtRocoinData.DailyTaskList); idx++ {
- taskInfo := activityData.BtRocoinData.DailyTaskList[idx]
- if taskInfo.State != TASK_REWARD_STATE_COMPLETED {
- continue
- }
- convertData, ok := model.ConvertActivitiesTaskList[int32(taskInfo.TaskId)]
- if !ok {
- continue
- }
- for k, v := range convertData.RewardList {
- addItemList[k] += v
- }
- taskInfo.State = TASK_REWARD_STATE_REWARD
- this.addChangeActivity(activityData.ActivitiesId, taskInfo.TaskId)
- delete(this.activitiesTaskList[activityData.ActivitiesId], taskInfo.TaskId)
- this.delTaskType(activityData.ActivitiesId, convertData)
- }
- activityData.BtRocoinData.DailyTaskList = nil
- this.addChangeActivity(activityData.ActivitiesId, 0)
- this.SetDirty(true)
- // week
- nowTime := util.GetTimeMilliseconds()
- if nowTime >= activityData.BtRocoinData.WeekDayEndTime {
- for idx := 0; idx < len(activityData.BtRocoinData.WeekTaskList); idx++ {
- taskInfo := activityData.BtRocoinData.WeekTaskList[idx]
- if taskInfo.State != TASK_REWARD_STATE_COMPLETED {
- continue
- }
- convertData, ok := model.ConvertActivitiesTaskList[int32(taskInfo.TaskId)]
- if !ok {
- continue
- }
- for k, v := range convertData.RewardList {
- addItemList[k] += v
- }
- taskInfo.State = TASK_REWARD_STATE_REWARD
- this.addChangeActivity(activityData.ActivitiesId, taskInfo.TaskId)
- delete(this.activitiesTaskList[activityData.ActivitiesId], taskInfo.TaskId)
- this.delTaskType(activityData.ActivitiesId, convertData)
- }
- activityData.BtRocoinData.WeekTaskList = nil
- this.addChangeActivity(activityData.ActivitiesId, 0)
- this.SetDirty(true)
- }
- if len(addItemList) > 0 {
- //发送邮件奖励
- this.role.AddMail(model.GlobalMailIdActivitiesCurRechargeReward, serverproto.MailType_MailType_Activities,
- addItemList, []int32{activityData.ActivitiesId}, "", "")
- }
- }
- func (this *RoleActivity) getAllActivityRewardBTZhenJiaRecharge(activityData *serverproto.ActivitiesDetailData) {
- if len(activityData.BtZhenjiaRechargeTaskList) <= 0 {
- return
- }
- var addItemList = map[int32]int32{}
- for idx := 0; idx < len(activityData.BtZhenjiaRechargeTaskList); idx++ {
- taskInfo := activityData.BtZhenjiaRechargeTaskList[idx]
- if taskInfo.State != TASK_REWARD_STATE_COMPLETED {
- continue
- }
- convertData, ok := model.ConvertActivitiesTaskList[int32(taskInfo.TaskId)]
- if !ok {
- continue
- }
- for k, v := range convertData.RewardList {
- addItemList[k] += v
- }
- taskInfo.State = TASK_REWARD_STATE_REWARD
- this.addChangeActivity(activityData.ActivitiesId, taskInfo.TaskId)
- delete(this.activitiesTaskList[activityData.ActivitiesId], taskInfo.TaskId)
- }
- activityData.BtZhenjiaRechargeTaskList = nil
- this.SetDirty(true)
- if len(addItemList) > 0 {
- //发送邮件奖励
- this.role.AddMail(model.GlobalMailIdActivitiesCurRechargeReward, serverproto.MailType_MailType_Activities,
- addItemList, []int32{activityData.ActivitiesId}, "", "")
- }
- }
- // param=taskId
- func (this *RoleActivity) activitiesRewardBTRoCoinRecharge(activityId int32, param int32) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- if param <= 0 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- taskInfo := this.getTaskData(activityId, uint32(param))
- if taskInfo == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_TASK_NOT
- }
- if taskInfo.State == TASK_REWARD_STATE_REWARD {
- return serverproto.ErrorCode_ERROR_TASK_REWARDED
- }
- //应对玩家任务条件调整
- if taskInfo.State != TASK_REWARD_STATE_COMPLETED {
- if this.checkTaskInfo(taskInfo) {
- if taskInfo.State != TASK_REWARD_STATE_COMPLETED {
- return serverproto.ErrorCode_ERROR_TASK_REWARDED
- }
- } else {
- return serverproto.ErrorCode_ERROR_TASK_REWARDED
- }
- }
- convertData, ok := model.ConvertActivitiesTaskList[int32(taskInfo.TaskId)]
- if !ok {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_TASK_NOT
- }
- ret := this.role.CanAddItemList(convertData.RewardList)
- if ret != serverproto.ErrorCode_ERROR_OK {
- return ret
- }
- this.role.AddItemList(convertData.RewardList, AddFrom_Activities, true)
- //任务状态修改
- taskInfo.State = TASK_REWARD_STATE_REWARD
- this.addChangeActivity(activityId, taskInfo.TaskId)
- this.addChangeActivity(activityId, 0)
- this.SetDirty(true)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- detailData := &serverproto.ActivitiesDetailData{
- ActivitiesId: activityId,
- ActivitiesType: activityData.ActivitiesType,
- StartTime: activityData.StartTime,
- EndTime: activityData.EndTime,
- CurDay: activityData.CurDay,
- BtRocoinData: &serverproto.ActivityBTROCoin{
- WeekDayEndTime: activityData.BtRocoinData.WeekDayEndTime,
- },
- }
- if taskInfo.TaskType == int32(model.BTTaskRefreshType_Day) {
- detailData.BtRocoinData.DailyTaskList = append(detailData.BtRocoinData.DailyTaskList, taskInfo)
- } else {
- detailData.BtRocoinData.WeekTaskList = append(detailData.BtRocoinData.WeekTaskList, taskInfo)
- }
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, detailData)
- this.role.ReplayGate(ntfMsg, true)
- //ack奖励处理
- ackMsg := &serverproto.SCActivitiesRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- ActivityId: activityId,
- }
- for key, val := range convertData.RewardList {
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, &serverproto.KeyValueType{Key: key, Value: val})
- }
- this.role.ReplayGate(ackMsg, true)
- return serverproto.ErrorCode_ERROR_OK
- }
- // param=taskId
- func (this *RoleActivity) activitiesRewardBTZhenJiaRecharge(activityId int32, param int32) serverproto.ErrorCode {
- activityData := this.getActivityData(activityId)
- if activityData == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_NOT
- }
- if param <= 0 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- taskInfo := this.getTaskData(activityId, uint32(param))
- if taskInfo == nil {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_TASK_NOT
- }
- if taskInfo.State == TASK_REWARD_STATE_REWARD {
- return serverproto.ErrorCode_ERROR_TASK_REWARDED
- }
- //应对玩家任务条件调整
- if taskInfo.State != TASK_REWARD_STATE_COMPLETED {
- if this.checkTaskInfo(taskInfo) {
- if taskInfo.State != TASK_REWARD_STATE_COMPLETED {
- return serverproto.ErrorCode_ERROR_TASK_REWARDED
- }
- } else {
- return serverproto.ErrorCode_ERROR_TASK_REWARDED
- }
- }
- convertData, ok := model.ConvertActivitiesTaskList[int32(taskInfo.TaskId)]
- if !ok {
- return serverproto.ErrorCode_ERROR_ACTIVITIES_TASK_NOT
- }
- ret := this.role.CanAddItemList(convertData.RewardList)
- if ret != serverproto.ErrorCode_ERROR_OK {
- return ret
- }
- this.role.AddItemList(convertData.RewardList, AddFrom_Activities, true)
- //任务状态修改
- taskInfo.State = TASK_REWARD_STATE_REWARD
- this.addChangeActivity(activityId, taskInfo.TaskId)
- this.addChangeActivity(activityId, 0)
- this.SetDirty(true)
- //通知数据变更
- ntfMsg := &serverproto.SCActivitiesChangeNtf{
- CurDayEndTime: this.curDayEndTime,
- }
- detailData := &serverproto.ActivitiesDetailData{
- ActivitiesId: activityId,
- ActivitiesType: activityData.ActivitiesType,
- StartTime: activityData.StartTime,
- EndTime: activityData.EndTime,
- CurDay: activityData.CurDay,
- }
- detailData.BtZhenjiaRechargeTaskList = append(detailData.BtZhenjiaRechargeTaskList, taskInfo)
- ntfMsg.ActivityDataList = append(ntfMsg.ActivityDataList, detailData)
- this.role.ReplayGate(ntfMsg, true)
- //ack奖励处理
- ackMsg := &serverproto.SCActivitiesRewardAck{
- Error: int32(serverproto.ErrorCode_ERROR_OK),
- ActivityId: activityId,
- }
- for key, val := range convertData.RewardList {
- ackMsg.RewardItemList = append(ackMsg.RewardItemList, &serverproto.KeyValueType{Key: key, Value: val})
- }
- this.role.ReplayGate(ackMsg, true)
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RoleActivity) resetBTTasks(detailData *serverproto.ActivitiesDetailData) {
- if detailData.ActivitiesType == int32(serverproto.EActivityType_EActivityType_BT_ZhenJiaRecharge) {
- taskList := model.GetActBTRechargeDayDataList(detailData.ActivitiesId, detailData.CurDay)
- if len(taskList) <= 0 {
- return
- }
- var taskDataList []*serverproto.TaskData
- for idx := 0; idx < len(taskList); idx++ {
- taskData := this.addDayTask(detailData.ActivitiesId, uint32(taskList[idx]), 0, false, 0)
- if taskData != nil {
- taskData.TaskType = int32(model.BTTaskRefreshType_Day)
- taskDataList = append(taskDataList, taskData)
- }
- }
- if len(taskDataList) > 0 {
- detailData.BtZhenjiaRechargeTaskList = taskDataList
- }
- this.SetDirty(true)
- } else if detailData.ActivitiesType == int32(serverproto.EActivityType_EActivityType_BT_ROCoinRecharge) {
- // daily task
- dailyTaskList := model.GetActBTROCoinRechargeDayDataList(detailData.ActivitiesId, detailData.CurDay, model.BTTaskRefreshType_Day)
- if len(dailyTaskList) <= 0 {
- return
- }
- var taskDataList []*serverproto.TaskData
- for idx := 0; idx < len(dailyTaskList); idx++ {
- taskData := this.addDayTask(detailData.ActivitiesId, uint32(dailyTaskList[idx]), 0, false, 0)
- if taskData != nil {
- taskData.TaskType = int32(model.BTTaskRefreshType_Day)
- taskDataList = append(taskDataList, taskData)
- }
- }
- if len(taskDataList) > 0 {
- detailData.BtRocoinData.DailyTaskList = taskDataList
- }
- // week task
- if detailData.BtRocoinData != nil {
- nowTime := util.GetTimeMilliseconds()
- if nowTime >= detailData.BtRocoinData.WeekDayEndTime || len(detailData.BtRocoinData.WeekTaskList) <= 0 {
- weekTaskList := model.GetActBTROCoinRechargeDayDataList(detailData.ActivitiesId, detailData.CurDay, model.BTTaskRefreshType_Week)
- if len(weekTaskList) <= 0 {
- return
- }
- taskDataList = []*serverproto.TaskData{}
- for idx := 0; idx < len(weekTaskList); idx++ {
- taskData := this.addDayTask(detailData.ActivitiesId, uint32(weekTaskList[idx]), 0, false, 0)
- if taskData != nil {
- taskData.TaskType = int32(model.BTTaskRefreshType_Week)
- taskDataList = append(taskDataList, taskData)
- }
- }
- if len(taskDataList) > 0 {
- detailData.BtRocoinData.WeekTaskList = taskDataList
- }
- if len(detailData.BtRocoinData.WeekTaskList) > 0 {
- detailData.BtRocoinData.WeekDayEndTime = this.curDayEndTime + 6*DayMS
- }
- }
- }
- this.SetDirty(true)
- }
- }
|