public void Execute(CardData cardData, int choice, ChoiceData chMeta, bool me, int time, PlayerManager enemy) { if (Services.data.CheckConditions(chMeta.conditions, time, false, me)) { List <RewardData> result = new List <RewardData> (); Services.data.GetResourceReward(result, chMeta.reward, chMeta.cost, time, true, false, me); foreach (RewardData r in result) { if (r.count > 0) { if (r.enemy) { enemy.AddResource(r.id, r.count); } else { AddResource(r.id, r.count); } } else { if (r.enemy) { enemy.SubResource(r.id, Math.Abs(r.count)); } else { SubResource(r.id, Math.Abs(r.count)); } } } } CardExecutedItem cardVO = playerData.cards.Find(c => c.id == cardData.id); if (cardVO == null) { cardVO = new CardExecutedItem(); playerData.cards.Add(cardVO); } cardVO.id = cardData.id; cardVO.choice = choice; cardVO.executed = time; SaveCardLocal(cardVO); enemy.OnProfileUpdated?.Invoke(); OnProfileUpdated?.Invoke(); //only for me if (this == Services.player) { Services.network.AddRequestToPool(new RequestVO("choise")); } }
public async UniTask Init(IProgress <float> progress = null) { RequestVO r = new RequestVO("profile"); Services.network.AddRequestToPool(r); await UniTask.DelayFrame(2); //if the answer is none if (!SecurePlayerPrefs.HasKey("profile")) { //Services.data.game.profiles.timestamp = GameTime.GetTime (); //string json = JsonUtility.ToJson (Services.data.game.profiles); // Debug.Log(json); // PlayerData[] players = JsonUtility.FromJson<PlayerData[]> (json); playerData = new PlayerData(); foreach (PlayerData p in Services.data.game.profiles) { if (this == Services.player && p.tags.Contains("player")) { //playerData = Utils.DeepCopy (p); playerData = Utils.DeepCopyClass(p); break; } else if (this == Services.enemy && p.tags.Contains("enemy")) { playerData = Utils.DeepCopyClass(p); break; } } switch (Services.data.tutorStep) { case 0: playerData.resources = Utils.DeepCopyList(playerData.tutorial0.current); break; case 1: playerData.resources = Utils.DeepCopyList(playerData.tutorial1.current); break; default: break; } // playerData.resources = Utils.DeepCopyList (playerData.t); //SecurePlayerPrefs.SetString ("profile", json); } OnProfileUpdated?.Invoke(); }
private void SocketDataReceived(object sender, WebSocketSharp.MessageEventArgs result) { GatewayResponse payload = result.Data.Deserialize <GatewayResponse>(); Sequence = payload.Sequence; switch (payload.Opcode) { case GatewayOpcode.Event: switch (payload.Title) { case "READY": LoggedIn = true; Login login = payload.Deserialize <Login>().SetJson(payload.Deserialize <JObject>()).SetClient(this); this.User = login.User; this.SessionId = login.SessionId; OnLoggedIn?.Invoke(this, new LoginEventArgs(login)); break; case "USER_SETTINGS_UPDATE": OnSettingsUpdated?.Invoke(this, new SettingsUpdatedEventArgs(payload.Deserialize <Settings>())); break; case "USER_UPDATE": User user = payload.Deserialize <User>().SetClient(this); if (user.Id == User.Id) { User.Update(user); } OnUserUpdated?.Invoke(this, new UserEventArgs(user)); break; case "GUILD_CREATE": OnJoinedGuild?.Invoke(this, new GuildEventArgs(payload.Deserialize <Guild>().SetClient(this))); break; case "GUILD_UPDATE": OnGuildUpdated?.Invoke(this, new GuildEventArgs(payload.Deserialize <Guild>().SetClient(this))); break; case "GUILD_DELETE": OnLeftGuild?.Invoke(this, new GuildEventArgs(payload.Deserialize <Guild>().SetClient(this))); break; case "GUILD_MEMBER_ADD": OnUserJoinedGuild?.Invoke(this, new GuildMemberEventArgs(payload.Deserialize <GuildMemberUpdate>().SetClient(this).Member)); break; case "GUILD_MEMBER_REMOVE": OnUserLeftGuild?.Invoke(this, new GuildMemberEventArgs(payload.Deserialize <GuildMemberUpdate>().SetClient(this).Member)); break; case "GUILD_MEMBER_UPDATE": OnGuildMemberUpdated?.Invoke(this, new GuildMemberEventArgs(payload.Deserialize <GuildMember>().SetClient(this))); break; case "GUILD_MEMBERS_CHUNK": OnGuildMembersReceived?.Invoke(this, new GuildMembersEventArgs(payload.Deserialize <GuildMemberList>().SetClient(this))); break; case "PRESENCE_UPDATE": OnUserPresenceUpdated?.Invoke(this, new PresenceUpdatedEventArgs(payload.Deserialize <PresenceUpdate>())); break; case "VOICE_STATE_UPDATE": VoiceState state = payload.Deserialize <VoiceState>().SetClient(this); if (state.ChannelId != null) { OnUserJoinedVoiceChannel?.Invoke(this, new VoiceStateEventArgs(state)); } else { OnUserLeftVoiceChannel?.Invoke(this, new VoiceStateEventArgs(state)); } break; case "GUILD_ROLE_CREATE": OnRoleCreated?.Invoke(this, new RoleEventArgs(payload.Deserialize <RoleContainer>().Role.SetClient(this))); break; case "GUILD_ROLE_UPDATE": OnRoleUpdated?.Invoke(this, new RoleEventArgs(payload.Deserialize <RoleContainer>().Role.SetClient(this))); break; case "GUILD_EMOJIS_UPDATE": OnEmojisUpdated?.Invoke(this, new EmojisUpdatedEventArgs(payload.Deserialize <EmojiContainer>().SetClient(this))); break; case "CHANNEL_CREATE": OnChannelCreated?.Invoke(this, new ChannelEventArgs(payload.Deserialize <GuildChannel>().SetClient(this))); break; case "CHANNEL_UPDATE": OnChannelUpdated?.Invoke(this, new ChannelEventArgs(payload.Deserialize <GuildChannel>().SetClient(this))); break; case "CHANNEL_DELETE": OnChannelDeleted?.Invoke(this, new ChannelEventArgs(payload.Deserialize <GuildChannel>().SetClient(this))); break; case "TYPING_START": OnUserTyping?.Invoke(this, new UserTypingEventArgs(payload.Deserialize <UserTyping>())); break; case "MESSAGE_CREATE": OnMessageReceived?.Invoke(this, new MessageEventArgs(payload.Deserialize <Message>().SetClient(this))); break; case "MESSAGE_UPDATE": OnMessageEdited?.Invoke(this, new MessageEventArgs(payload.Deserialize <Message>().SetClient(this))); break; case "MESSAGE_DELETE": OnMessageDeleted?.Invoke(this, new MessageDeletedEventArgs(payload.Deserialize <DeletedMessage>())); break; case "MESSAGE_REACTION_ADD": OnMessageReactionAdded?.Invoke(this, new ReactionEventArgs(payload.Deserialize <MessageReactionUpdate>().SetClient(this))); break; case "MESSAGE_REACTION_REMOVE": OnMessageReactionRemoved?.Invoke(this, new ReactionEventArgs(payload.Deserialize <MessageReactionUpdate>().SetClient(this))); break; case "GUILD_BAN_ADD": OnUserBanned?.Invoke(this, new BanUpdateEventArgs(payload.Deserialize <BanContainer>().SetClient(this))); break; case "GUILD_BAN_REMOVE": OnUserUnbanned?.Invoke(this, new BanUpdateEventArgs(payload.Deserialize <BanContainer>().SetClient(this))); break; case "RELATIONSHIP_ADD": OnRelationshipAdded?.Invoke(this, new RelationshipEventArgs(payload.Deserialize <Relationship>().SetClient(this))); break; case "RELATIONSHIP_REMOVE": OnRelationshipRemoved?.Invoke(this, new RelationshipEventArgs(payload.Deserialize <Relationship>().SetClient(this))); break; case "USER_CONNECTIONS_UPDATE": Task.Run(() => { DiscordProfile profile = this.User.GetProfile(); OnProfileUpdated?.Invoke(this, new ProfileUpdatedEventArgs(profile)); }); break; } break; case GatewayOpcode.InvalidSession: this.LoginToGateway(); break; case GatewayOpcode.Connected: if (!LoggedIn) { this.LoginToGateway(); } else { this.Resume(); } this.StartHeartbeatHandlersAsync(payload.Deserialize <JObject>().GetValue("heartbeat_interval").ToObject <uint>()); break; } }
private void SocketDataReceived(object sender, WebSocketSharp.MessageEventArgs result) { GatewayResponse payload = result.Data.Deserialize <GatewayResponse>(); Sequence = payload.Sequence; Task.Run(() => { switch (payload.Opcode) { case GatewayOpcode.Event: switch (payload.Title) { case "READY": LoggedIn = true; Login login = payload.Deserialize <Login>().SetJson(payload.Deserialize <JObject>()).SetClient(this); this.User = login.User; this.SessionId = login.SessionId; OnLoggedIn?.Invoke(this, new LoginEventArgs(login)); break; case "USER_SETTINGS_UPDATE": OnSettingsUpdated?.Invoke(this, new SettingsUpdatedEventArgs(payload.Deserialize <Settings>())); break; case "USER_UPDATE": User user = payload.Deserialize <User>().SetClient(this); if (user.Id == User.Id) { User.Update(user); } OnUserUpdated?.Invoke(this, new UserEventArgs(user)); break; case "GUILD_MEMBER_LIST_UPDATE": /* * var args = new GuildMembersEventArgs(payload.Deserialize<GatewayUserMemberQueryResponse>()); * * foreach (var member in args.Members) * { * member.SetClient(this); * member.GuildId = args.GuildId; * } * * OnGuildMembersReceived?.Invoke(this, args);*/ break; case "GUILD_CREATE": OnJoinedGuild?.Invoke(this, new SocketGuildEventArgs(payload.Deserialize <SocketGuild>().SetClient(this))); break; case "GUILD_UPDATE": OnGuildUpdated?.Invoke(this, new GuildEventArgs(payload.Deserialize <Guild>().SetClient(this))); break; case "GUILD_DELETE": OnLeftGuild?.Invoke(this, new GuildEventArgs(payload.Deserialize <Guild>().SetClient(this))); break; case "GUILD_MEMBER_ADD": OnUserJoinedGuild?.Invoke(this, new GuildMemberEventArgs(payload.Deserialize <GuildMemberUpdate>().SetClient(this).Member)); break; case "GUILD_MEMBER_REMOVE": OnUserLeftGuild?.Invoke(this, new GuildMemberEventArgs(payload.Deserialize <GuildMemberUpdate>().SetClient(this).Member)); break; case "GUILD_MEMBER_UPDATE": OnGuildMemberUpdated?.Invoke(this, new GuildMemberEventArgs(payload.Deserialize <GuildMember>().SetClient(this))); break; case "GUILD_MEMBERS_CHUNK": OnGuildMembersReceived?.Invoke(this, new GuildMembersEventArgs(payload.Deserialize <GuildMemberList>().SetClient(this))); break; case "PRESENCE_UPDATE": OnUserPresenceUpdated?.Invoke(this, new PresenceUpdatedEventArgs(payload.Deserialize <PresenceUpdate>())); break; case "VOICE_STATE_UPDATE": OnVoiceStateUpdated?.Invoke(this, new VoiceStateEventArgs(payload.Deserialize <DiscordVoiceState>().SetClient(this))); break; case "VOICE_SERVER_UPDATE": OnVoiceServer?.Invoke(this, payload.Deserialize <DiscordVoiceServer>()); break; case "GUILD_ROLE_CREATE": OnRoleCreated?.Invoke(this, new RoleEventArgs(payload.Deserialize <RoleContainer>().Role.SetClient(this))); break; case "GUILD_ROLE_UPDATE": OnRoleUpdated?.Invoke(this, new RoleEventArgs(payload.Deserialize <RoleContainer>().Role.SetClient(this))); break; case "GUILD_EMOJIS_UPDATE": OnEmojisUpdated?.Invoke(this, new EmojisUpdatedEventArgs(payload.Deserialize <EmojiContainer>().SetClient(this))); break; case "CHANNEL_CREATE": OnChannelCreated?.Invoke(this, new ChannelEventArgs(payload.Deserialize <GuildChannel>().SetClient(this))); break; case "CHANNEL_UPDATE": OnChannelUpdated?.Invoke(this, new ChannelEventArgs(payload.Deserialize <GuildChannel>().SetClient(this))); break; case "CHANNEL_DELETE": OnChannelDeleted?.Invoke(this, new ChannelEventArgs(payload.Deserialize <GuildChannel>().SetClient(this))); break; case "TYPING_START": OnUserTyping?.Invoke(this, new UserTypingEventArgs(payload.Deserialize <UserTyping>())); break; case "MESSAGE_CREATE": OnMessageReceived?.Invoke(this, new MessageEventArgs(payload.Deserialize <Message>().SetClient(this))); break; case "MESSAGE_UPDATE": OnMessageEdited?.Invoke(this, new MessageEventArgs(payload.Deserialize <Message>().SetClient(this))); break; case "MESSAGE_DELETE": OnMessageDeleted?.Invoke(this, new MessageDeletedEventArgs(payload.Deserialize <DeletedMessage>())); break; case "MESSAGE_REACTION_ADD": OnMessageReactionAdded?.Invoke(this, new ReactionEventArgs(payload.Deserialize <MessageReactionUpdate>().SetClient(this))); break; case "MESSAGE_REACTION_REMOVE": OnMessageReactionRemoved?.Invoke(this, new ReactionEventArgs(payload.Deserialize <MessageReactionUpdate>().SetClient(this))); break; case "GUILD_BAN_ADD": OnUserBanned?.Invoke(this, new BanUpdateEventArgs(payload.Deserialize <BanContainer>().SetClient(this))); break; case "GUILD_BAN_REMOVE": OnUserUnbanned?.Invoke(this, new BanUpdateEventArgs(payload.Deserialize <BanContainer>().SetClient(this))); break; case "RELATIONSHIP_ADD": OnRelationshipAdded?.Invoke(this, new RelationshipEventArgs(payload.Deserialize <Relationship>().SetClient(this))); break; case "RELATIONSHIP_REMOVE": OnRelationshipRemoved?.Invoke(this, new RelationshipEventArgs(payload.Deserialize <Relationship>().SetClient(this))); break; case "USER_CONNECTIONS_UPDATE": try { DiscordProfile profile = this.User.GetProfile(); OnProfileUpdated?.Invoke(this, new ProfileUpdatedEventArgs(profile)); } catch { } break; case "MESSAGE_ACK": // triggered whenever another person logged into the account acknowledges a message break; case "SESSIONS_REPLACE": OnSessionsUpdated?.Invoke(this, new DiscordSessionsEventArgs(payload.Deserialize <List <DiscordSession> >())); break; } break; case GatewayOpcode.InvalidSession: this.LoginToGateway(); break; case GatewayOpcode.Connected: if (!LoggedIn) { this.LoginToGateway(); } else { this.Resume(); } int interval = payload.Deserialize <JObject>().GetValue("heartbeat_interval").ToObject <int>(); try { while (true) { Socket.Send(GatewayOpcode.Heartbeat, this.Sequence); Thread.Sleep(interval); } } catch { } break; } }); }
public static void OnProfileUpdated_Event(object sender, object args) { OnProfileUpdated?.Invoke(sender, args); }