public void RequestRoomObjectManipulation(object data, PhotonMessageInfo info) { if (!PhotonNetwork.IsMasterClient) { Debug.LogWarning("[RequestRoomObjectManipulation] Only Master Client can Manipulate RoomObject!"); return; } var insData = new InstantiationData(data as object[]); //TODO: MC Verify data if (insData.tokenType != SyncTokenType.General) { Debug.LogWarning("[RequestRoomObjectManipulation] Only For Manipulate RoomObject!"); return; } if (insData.TryGetValue(InstantiationData.InstantiationKey.objectname, out object objName)) { // Object UUID if (!insData.ContainsKey(InstantiationData.InstantiationKey.objectuuid)) { var tokenID = $"ro_{Random.Range(1000, 9999).ToString()}"; insData[InstantiationData.InstantiationKey.objectuuid.ToString()] = tokenID; } if (insData.TryGetValue(InstantiationData.InstantiationKey.sceneobject, out object soModification)) { switch ((string)soModification) { case "create": Debug.LogWarning("[RequestRoomObjectManipulation] Create"); itp.RequestSyncToken(insData); break; case "destroy": photonView.RPC("RequestLocalObjectManipulation", RpcTarget.Others, insData.ToData() as object); itp.RevokeSyncToken(insData); iosManager.DestroyObject((string)objName, (string)insData["objectuuid"]); Debug.LogWarning($"[RequestRoomObjectManipulation] MC Destroy {insData}"); break; } } } }
public void RevokeSyncToken(InstantiationData insData) { if (insData.TryGetValue(InstantiationData.InstantiationKey.sceneid, out object sceneid)) { RevokeSyncToken((int)sceneid); } }
public void Init(InstantiationData data, bool isMine, ITransmissionBase itb) { instData = data; if (data.TryGetValue(InstantiationData.InstantiationKey.objectuuid, out object uuid)) { objectUUID = (string)uuid; } }
void InitRemote(InstantiationData data) { Debug.LogWarning($"[PlayerCoreAdditive] InitRemote"); gameObject.name = "RemotePlayerToken"; //Based on objName/ objUUID we received... if (data.TryGetValue(InstantiationData.InstantiationKey.objectuuid, out object objuuid) && data.TryGetValue(InstantiationData.InstantiationKey.objectname, out object objname)) { // remote one, Create based on ObjectName var go = ObjectSupplyManager.Instance.BuildObject((string)objname, (string)objuuid) as GameObject; this.parent.RefObject = go; go.GetComponent <Player>().Init(data, false, parent); } }
public void Init(InstantiationData data, bool isMine, ITransmissionBase tb = null) { Debug.LogWarning($"ISyncHandlerUser Init isMine?{isMine}"); insdata = data; var pa = GetComponent <PersistenceHelper>(); string uuid = null; if (data.TryGetValue(InstantiationData.InstantiationKey.objectuuid, out object val)) { uuid = (string)val; } //// Local HostPlayer Ask for a TokenHandler if (isMine) { SetupTokenHandler(); pa.Init(uuid); } else { pa.Init( uuid, () => { creator.RemoveFromDict(uuid); }, tb as TransmissionBase ); if (data.TryGetValue(InstantiationData.InstantiationKey.objectpersist, out val)) { pa.Setup((int)val); } } //RaiseEventHelper.instance.Register(new NetworkLayer.RoomEventRegistration() //{ // key = "Emit", // OnRoomEvent = EmitPropToLocal, // cachingOption = NetworkLayer.EventCaching.DoNotCache, // receivers = NetworkLayer.EventTarget.All //}); }
public void RequestLocalObjectManipulation(object data, PhotonMessageInfo info) { var insData = new InstantiationData(data as object[]); if (insData.tokenType != SyncTokenType.General) { Debug.LogWarning("[RequestLocalObjectManipulation] Only For Manipulate Local RoomObject!"); return; } if (insData.TryGetValue("localobject", out object objName)) { if (!insData.ContainsKey("objectuuid")) { return; } if (insData.TryGetValue("sceneobject", out object modifyword) && (string)modifyword == "Destroy") { iosManager.DestroyObject((string)objName, (string)insData["objectuuid"]); } } }
public void Init(InstantiationData data, bool isMine) { Debug.LogWarning("[RoomCoreAdditive] Init"); this.parent = GetComponent <TransmissionBase>(); if (!osa) { osa = GetComponent <OwnershipSubAdditive>(); } osa.Init(data); // if (data.TryGetValue(InstantiationData.InstantiationKey.objectuuid, out object objUUID) && data.TryGetValue(InstantiationData.InstantiationKey.objectname, out object objName)) { var obj = ObjectSupplyManager.Instance.BuildObject((string)objName, (string)objUUID); if (obj == null) { Debug.LogError("[Init] Fail to BuildObject"); return; } var go = obj as GameObject; parent.RefObject = go; go.transform.SetParent(ServiceManager.Instance.networkSystem.RoomObjectParent); // link between Token and TokenUser var tu = go.GetComponent <ISyncHandlerUser>(); tu?.Init(data, false, parent); Debug.LogWarning("[Init] IOwnershipInteractable"); var oi = go.GetComponent <IOwnershipInteractable>(); oi.TargetObject = gameObject as object; } }
public void ManualBuildSyncTokenOnEvent(EventData photonEvent) { byte eventCode = photonEvent.Code; if ((RaiseEvnetCode)eventCode == RaiseEvnetCode.CustomManualInstantiationEventCode) { var instData = new InstantiationData((object[])photonEvent.CustomData); var tok = PrefabPoolManager.Instance.Instantiate("TransmissionToken", Vector3.zero, Quaternion.identity);//Instantiate(transmissionTokenPrefab); //setup based on InstantiationData PhotonView photonView = tok.GetComponent <PhotonView>(); if (instData.TryGetValue("viewID", out object vid)) { photonView.ViewID = (int)vid; } else { Debug.LogWarning($"ViewID Missing!"); } } }
// PhotonNetwork.OnEvent public override void OnRaiseEvent(IRaiseEventCallInfo info) { var tickCount = Environment.TickCount; #if true switch (info.Request.EvCode) { case PunEvent.Instantiation: { var data = new InstantiationData(); if (!data.Deserialize(info.Request)) { break; } this.PrefabHolder.Instantiate(info.ActorNr, data); break; } case PunEvent.Destroy: { if (!(info.Request.Data is Hashtable data)) { break; } if (!data.TryGetValue((byte)0, out int viewId)) { break; } this.PrefabHolder.Destroy(viewId); break; } case PunEvent.DestroyPlayer: case EventCode.Leave: // ??? // TODO break; case PunEvent.RPC: { if (!(info.Request.Data is Hashtable data)) { break; } if (!data.TryGetValue((byte)0, out int viewId)) { break; } var prefix = data.TryGetValue <short>((byte)1) ?? 0; if (!data.TryGetValue((byte)2, out int timeStamp)) { break; } var idx = data.TryGetValue <byte>((byte)5); if (!idx.HasValue) { if (!data.TryGetValue((byte)3, out string methodName)) { break; } } var args = data.TryGetValue <object[]>((byte)4) ?? null; // skillRPCAsync if (idx != 6) { break; } var i = 0; if (!args.TryRead(out byte beam, ref i)) { break; } if (!args.TryRead(out Vector2 pos_xz, ref i)) { break; } if (!args.TryRead(out float angle_y, ref i)) { break; } if (!this.Master.Skill.TryGetValue(beam, out var skill)) { break; } if (beam == 0 && this.PrefabHolder.TryGetValue(viewId, out var pv)) { pv.IsDash = true; var rad = angle_y * Math.PI / 180; pv.DashDestPos = pos_xz + (skill.Radius * new Vector2((float)Math.Sin(rad), (float)Math.Cos(rad))); this.PluginHost.CreateOneTimeTimer(() => { pv.IsDash = false; }, skill.DelayTime); break; } this.PluginHost.CreateOneTimeTimer(() => { var hitTarget = this.PrefabHolder.Where(e => e.Key != viewId) .Where(e => !e.Value.IsDash && Collider.IsHit(skill, pos_xz, angle_y, e.Value.GetCurrentPosition())); foreach (var target in hitTarget) { var table = new Hashtable { { (byte)0, target.Key }, { (byte)2, Environment.TickCount }, { (byte)5, (byte)5 }, }; this.PluginHost.RaiseEvent(PunEvent.RPC, table, sendParams: new SendParameters { Unreliable = false }); } }, skill.DelayTime); break; } case PunEvent.SendSerialize: case PunEvent.SendSerializeReliable: { var data = new PhotonSerializeViewData(this.PrefabHolder); if (!data.Deserialize(info.Request)) { this.PluginHost.LogError("Deserialize ERROR"); break; } this.PluginHost.LogInfo($"TIME: SV {tickCount}, PKT {data.ServerTimestamp}"); foreach (var e in data.PhotonViews) { if (!this.PrefabHolder.TryGetValue(e.ViewID, out var value)) { continue; } value.Add(e); } break; } case PunEvent.OwnershipTransfer: { if (!(info.Request.Data is int[] data)) { break; } var viewID = data[0]; var playerID = data[1]; break; } } #endif base.OnRaiseEvent(info); }