You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
5.6 KiB
197 lines
5.6 KiB
using System.Collections.Generic;
|
|
using ProtoCSStruct;
|
|
using Sog;
|
|
|
|
namespace Game;
|
|
|
|
//调查问卷
|
|
public class QuestionnaireSvc : AbstractActivity
|
|
{
|
|
|
|
private static readonly int QUESTIONNAIRE_STATUS_NONE = 0;
|
|
private static readonly int QUESTIONNAIRE_STATUS_CLICK = 1;
|
|
private static readonly int QUESTIONNAIRE_STATUS_DONE = 2;
|
|
//发奖
|
|
public override void OnRoleEnter(PlayerOnGame player)
|
|
{
|
|
}
|
|
|
|
protected override void OnStateChange(PlayerOnGame player, int actId, ActivityState state)
|
|
{
|
|
if (state == ActivityState.InProgress)
|
|
{
|
|
Init(player, actId);
|
|
}
|
|
else
|
|
{
|
|
ref var questionData = ref player.RoleData.ActExtraInfo.QuestionData;
|
|
for (var i = 0; i < questionData.Count; i++)
|
|
{
|
|
if (questionData[i].ActId == actId)
|
|
{
|
|
if (questionData[i].Status == QUESTIONNAIRE_STATUS_CLICK)
|
|
{
|
|
SendRewardMail(player, actId);
|
|
}
|
|
|
|
questionData.RemoveAt(i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
SendSync(player);
|
|
}
|
|
|
|
private static void SendRewardMail(PlayerOnGame player, int actId)
|
|
{
|
|
var desc = ActivityDescMgr.Instance.GetConfig(actId);
|
|
if (desc.mailId == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var rewardId = desc.param1[0];
|
|
var reward = RewardSvc.Reward(player, rewardId, false, false);
|
|
MailSender.SendNewMailToPlayer(player, desc.mailId, reward);
|
|
}
|
|
|
|
public override void OnSystemUnlock(PlayerOnGame player, int sysId)
|
|
{
|
|
}
|
|
|
|
protected override void OnDailyRefresh(PlayerOnGame player, ref DBActInfo activityInfo)
|
|
{
|
|
}
|
|
|
|
public static void Init(PlayerOnGame player, int actId)
|
|
{
|
|
ref var questionData = ref player.RoleData.ActExtraInfo.QuestionData;
|
|
var index = -1;
|
|
for (int i = 0; i < questionData.Count; i++)
|
|
{
|
|
if (questionData[i].ActId == actId)
|
|
{
|
|
index = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (index == -1)
|
|
{
|
|
questionData.Add(new QuestionnaireData() { ActId = actId });
|
|
}
|
|
else
|
|
{
|
|
questionData[index].Status = QUESTIONNAIRE_STATUS_NONE;
|
|
}
|
|
|
|
player.MakeDirty();
|
|
}
|
|
|
|
|
|
private static void SendSync(PlayerOnGame player)
|
|
{
|
|
var syncInfo = new QuestionnaireInfoSync();
|
|
syncInfo.QuestionData.CopyFrom(ref player.RoleData.ActExtraInfo.QuestionData);
|
|
player.SendToClient((int)CSGameMsgID.QuestionnaireRewardSyn, ref syncInfo);
|
|
}
|
|
|
|
//发送调查问卷奖励邮件
|
|
public static int SendQuestionnaireReward(PlayerOnGame player, StructPacket packet)
|
|
{
|
|
ref var req = ref packet.GetMessage<QuestionnaireRewardReq>();
|
|
var actId = req.ActId;
|
|
var status = req.Status;
|
|
var res = QuestionnaireRewardRes.Parser.GetMessageClear();
|
|
if (status != QUESTIONNAIRE_STATUS_CLICK && status != QUESTIONNAIRE_STATUS_DONE)
|
|
{
|
|
player.SendToClient((int)CSGameMsgID.QuestionnaireRewardRes, ref res);
|
|
return -1;
|
|
}
|
|
var state = ActivitySvc.GetActivityState(player, actId);
|
|
if (state != ActivityState.InProgress)
|
|
{
|
|
AddSendRecord(player, actId);
|
|
player.SendToClient((int)CSGameMsgID.QuestionnaireRewardRes, ref res);
|
|
return -1;
|
|
}
|
|
|
|
var desc = ActivityDescMgr.Instance.GetConfig(actId);
|
|
if (desc == null)
|
|
{
|
|
AddSendRecord(player, actId);
|
|
player.SendToClient((int)CSGameMsgID.QuestionnaireRewardRes, ref res);
|
|
return -1;
|
|
}
|
|
|
|
ref var record = ref player.RoleData.ActExtraInfo.QuestionData;
|
|
var index = -1;
|
|
for (var i = 0; i < record.Count; i++)
|
|
{
|
|
if (record[i].ActId == actId)
|
|
{
|
|
index = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (index < 0)
|
|
{
|
|
player.SendToClient((int)CSGameMsgID.QuestionnaireRewardRes, ref res);
|
|
return -1;
|
|
}
|
|
|
|
ref var data = ref record[index];
|
|
if (data.Status == QUESTIONNAIRE_STATUS_DONE)
|
|
{
|
|
player.SendToClient((int)CSGameMsgID.QuestionnaireRewardRes, ref res);
|
|
return -1;
|
|
}
|
|
|
|
if (data.Status == status)
|
|
{
|
|
player.SendToClient((int)CSGameMsgID.QuestionnaireRewardRes, ref res);
|
|
return -1;
|
|
}
|
|
|
|
data.Status = status;
|
|
if (status == QUESTIONNAIRE_STATUS_CLICK) //点击链接了
|
|
{
|
|
player.SendToClient((int)CSGameMsgID.QuestionnaireRewardRes, ref res);
|
|
SendSync(player);
|
|
player.MakeDirty();
|
|
return 0;
|
|
}
|
|
|
|
//去领奖了
|
|
AddSendRecord(player, actId);
|
|
SendReward(player, actId);
|
|
player.SendToClient((int)CSGameMsgID.QuestionnaireRewardRes, ref res);
|
|
SendSync(player);
|
|
player.MakeDirty();
|
|
return 1;
|
|
}
|
|
|
|
|
|
private static void SendReward(PlayerOnGame player, int actId)
|
|
{
|
|
var desc = ActivityDescMgr.Instance.GetConfig(actId);
|
|
|
|
var rewardId = desc.param1[0];
|
|
RewardSvc.Reward(player, rewardId, true, true);
|
|
}
|
|
|
|
private static void AddSendRecord(PlayerOnGame player, int actId)
|
|
{
|
|
ref var record = ref player.RoleData.ActExtraInfo.QuestionData;
|
|
for (int i = 0; i < record.Count; i++)
|
|
{
|
|
if (record[i].ActId == actId)
|
|
{
|
|
record[i].Status = QUESTIONNAIRE_STATUS_DONE;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|