faire défiler le temps hors jeu sans connexion internet ?

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Répondre
aryal
Messages : 74
Inscription : 30 Mai 2014 10:32

faire défiler le temps hors jeu sans connexion internet ?

Message par aryal » 04 Juin 2014 18:04

Bonjour,

Voila là question n'est pas spécialement claire dans le titre je vais l'expliquer plus en détail :

Est il possible de réussir a faire défiler le temps en fonction du monde réel sans connexion internet ? et SURTOUT en étant déconnecter du jeu donc avec le pc éteint?

J'aimerais crée certain script en coroutine pour l'IA avec cette notion ( donc par exemple s'il est XX heures ce personnage fait "ca") ainsi que des améliorations sur le joueurs ( pour un RPG) sur une base de plusieurs jours.

Et si une connexion internet est obligatoire pour ce genre de script certain connaîtrait des tuto pour établir cette connexion ainsi que de gérer donc la notion de temps qui soit égal avec notre fuseaux horaire ?

Merci par avance!!

Avatar de l’utilisateur
LudlowFx
Messages : 1367
Inscription : 19 Sep 2013 05:50

Re: faire défiler le temps hors jeu sans connexion internet

Message par LudlowFx » 04 Juin 2014 18:17

aryal a écrit : Est il possible de réussir a faire défiler le temps en fonction du monde réel sans connexion internet ? et SURTOUT en étant déconnecter du jeu donc avec le pc éteint?
Salut,

Tu veux parler de calculer le temps écouler entre deux sessions de jeu ? Comme pour l'utilisation sur un cycle jour/nuit afin de garder une certaine logique ?

Tu peux utiliser le timestamp. Tu enregistre celui de la dernière connexion (lancement du jeu/de la partie) et le timestamp où le joueur relance sa session. Après je te laisse voir pour le calcul qui est très simple et la transposition.

Au cas où tu n'es pas familier avec ce dernier tu peux lire cette page sur WP : Timestamp

Si ce n'est pas ce que tu cherchais, pourrais-tu être plus précis dans ce cas là.

Edit : Sur la page Wikipidia les exemple sont en PhP mais existe aussi en C#. Donc tu peux regarder du côté de msdn pour plus d'informations.
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

aryal
Messages : 74
Inscription : 30 Mai 2014 10:32

Re: faire défiler le temps hors jeu sans connexion internet

Message par aryal » 04 Juin 2014 20:25

LudlowFx a écrit : Donc tu peux regarder du côté de msdn pour plus d'informations.
c'est quoi ca ? ^^

je pense que dans l'idee c'est ca , mais si possible qui continue a tourner même lorsque l'on est en jeu, je vais prendre des exemples simple de jeu connue pour voir si l'idee de base est la bonne :

la construction des batiment / vaisseau / recherche sur Ogame, que tu sois en jeu ou que tu es couper internet le temps continue a defiler.
Les talent dans EveOnline qui sont appris en plusieurs jours , que tu sois connecter ou pas au jeux.
je pense que ca reviens au même que ton exemple avec les cycles jours nuit mais bon donner des exemples ne fait pas de mal ^^

j'ai fais quelques recherche sur youtube / google , je ne trouve pas de reference pour le timeStamp en C# :s

Edit : j'ai trouver quelques petit truc interessant, mais ils parlent tout de mise en reseau, est-ce vraiment necessaire ou on peux reussir sans internet ?

Avatar de l’utilisateur
LudlowFx
Messages : 1367
Inscription : 19 Sep 2013 05:50

Re: faire défiler le temps hors jeu sans connexion internet

Message par LudlowFx » 04 Juin 2014 21:02

Msdn = http://msdn.microsoft.com/en-us/library/ms123401.aspx

Est un complément plus qu'utile dans la programmation. Pour comprendre une architecture, une classe et ses interactions, le fonctionnement d'une librairies etc... Lorsque tu recherche une solution à un problème de script ou de compréhension en C# sur Google, les liens msdn sont très récurrents.

Ogame, connait pas et EveOnline jamais joué pas intéressant. Mais bon je vois en gros ce que tu veux dire.

C'est bien là que je pense que l'utilisation du Timestamp serait utile, après il existe peut être d'autre solutions. Imaginons le principe d'EveOnline que tu présente, je formule à ma façon ne connaissant pas le jeu.
Le lundi à 10h tu apprends un sort qui s'appel "MangePatateInfernal" et il lui faut disons 6h pour se compléter et passer du niveau 1 au niveau 2.

Donc tu l'apprends et te déconnecte, là tu enregistre le Timestamp.

Disons que tu revienne à 15h30, tu récupère le Timestamp actuel et tu le compare à l'ancien pour en calculer le temps où le joueur aura été absent. Dans notre cas il aura été absent pendant 5h30. Donc le temps restant est de 30 minutes avant que la compétence passe au niveau 2.
En pratique c'est bien entendu un peu plus compliqué car il y a plein de paramètres à prendre en compte selon le jeu donc nous ne pouvons pas te donner de recettes qui sera adapté à ton jeu précisément.

Par exemple, le Timestamp "1001207823" équivaut au 23/9/2001 à 3:17:03 Le timestamp (unix) désigne le nombre de secondes écoulées depuis le 1er janvier 1970 à minuit UTC précise.

Après c'est à toi d'établir un plan avec ce principe, pour qu'il soit adapté à ton jeu. Mais avant d'essayer de l'intégrer à même ton jeu tu devrais essayer des choses basiques comme. Enregistrer le timestamp (playerprefs par exemple pour l'essai) qui le jeu, revenir quelques minutes plus tard et comparé le timestamp actuel et le comparer à l'ancien. De là affiche dans la console le temps en secondes/minutes ou heures qu'il se sera passé depuis ta dernière session.

Nya, c'est la théorie après en fouillant un peut sur msdn, google et stackoverflow (beaucoup d'exemple à ce sujet) tu comprendra vite. Et j'ai regardé par curiosité. En 15 secondes j'ai trouvé sur Google donc il va falloir chercher plus ;)

Pour le côté réseau, ce n'est vraiment pas la branche dans laquelle j'excelle n'en ayant jamais vraiment fait sur U3D, donc si quelqu'un à une idée il te répondra à ma place.
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

Nixou
Messages : 71
Inscription : 30 Jan 2012 11:20

Re: faire défiler le temps hors jeu sans connexion internet

Message par Nixou » 05 Juin 2014 10:15

Hello,

Je pense que, si tu fonctionnes que sur un système local (sans internet), tu auras tjs le problème de la personne qui va changer la date de son mobile/ordinateur.
Mais l'idée est comme l'a dit LudlowFX:
-Stocker le timestamp de l'action.
-Tant que le jeu est allumé, tu lies ton compteur avec le temps de jeu qui passe.
-Si le jeu vient de démarrer, tu compares l'heure actuelle avec le timestamp, et ensuite ( comme au dessus), tu fais découler le temps avec le temps du jeu.


C'est le même système avec Ogame ou les jeux comme "Clash of clan" ou tous les autres du type. Sauf que quand tu fais une action, le timestamp est enregistré côté serveur. Le jeu ensuite fait vivre le timer de son côté et fait la synchro/vérification quand nécessaire.
Ex : Si tu triches en changeant la date de ton mobile. Eventuellement tu verras que ton upgrade est terminée, mais au moment ou tu feras une action, le jeu va appeler le serveur, et le serveur répondra qu'il y a un problème car , l'upgrade est toujours en cours => resynchronisation du timer.

Voilà en gros le système :)

Bon courage

aryal
Messages : 74
Inscription : 30 Mai 2014 10:32

Re: faire défiler le temps hors jeu sans connexion internet

Message par aryal » 05 Juin 2014 10:28

je comprend bien le systeme , je m’étais poser la question pour le cote "triche" mais vu que ce serait pour une version d'essaie pour le moment ca ne me derange que moyennement.
J'ai beau chercher je ne trouve pas de code simple ou de mon niveau pour enregistrer ce timeStamp ... j'ai pas mal d'autre fonctions a codée donc je vais faire autre chose pour le moment, mais si qq'un connait un page consacrer a ce genre de systeme ( avec ou sans internet ) je suis preneur ! et si possible en français mon anglais étant moyen :s

merci pour votre aide !

Nixou
Messages : 71
Inscription : 30 Jan 2012 11:20

Re: faire défiler le temps hors jeu sans connexion internet

Message par Nixou » 05 Juin 2014 10:39

Dans le sytème de sauvegarde de ton jeu, tu sauvegardes la date de l'action réalisée.
Ex:
DateTime CanonUpgrade2 = DateTime.Now;
et tu sauvegardes CanonUpgrade2.

Je connais pas le système de sauvegarde d'unity. d'autres te répondront certainement plus précisément.
Dernière édition par Nixou le 05 Juin 2014 10:51, édité 1 fois.

Avatar de l’utilisateur
LudlowFx
Messages : 1367
Inscription : 19 Sep 2013 05:50

Re: faire défiler le temps hors jeu sans connexion internet

Message par LudlowFx » 05 Juin 2014 10:43

Nixou a écrit :Je connais pas le système de sauvegarde d'unity. d'autres te répondront certainement plus précisément.
De manière interne, et très simple c'est PlayerPrefs (voir doc) c'est extrêmement simple à mettre en place. Mais bon, pour une scène ou de multiple scène c'est une autre histoire et dans ce cas il vaut mieux s'orienter vers quelques de plus performant. Soit un plugin, soit une solution comme XmlSerializer mais pour l'exemple et les essais PlayerPrefs fera amplement l'affaire selon moi.
Merci de lire et de prendre en considération la Nétiquette des Forums avant de poster un sujet !

ole
Messages : 68
Inscription : 31 Mai 2014 20:09

Re: faire défiler le temps hors jeu sans connexion internet

Message par ole » 05 Juin 2014 13:34

Sinon il peut lier son jeux à une base de donnée et aller chercher les infos en php via la commande unity : WWW
ainsi il stock l'heure serveur et reprend l'heure serveur . Qu'en pensez vous ?
En plus utiliser la commande www et le php lui permettront de faire un chat assez simple :) pour un jeux style Ogame c'est un must =)

aryal
Messages : 74
Inscription : 30 Mai 2014 10:32

Re: faire défiler le temps hors jeu sans connexion internet

Message par aryal » 05 Juin 2014 13:44

voila pour le moment où j'en suis .... cela ne donne pas grand chose evidament, je n'arrive meme pas a recuperer le temps du talent restant...

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using System;

public class Temps : MonoBehaviour {


	public float talent =300;
	public float talentCur;

	public int timeStampActuel;
	public int timeStampReconexion;
	public bool talent1Actif = false;
	// Use this for initialization


	void Start () {

		DateTime timeStampReconexion = DateTime.Now;
	}
	
	// Update is called once per frame
	void Update () {
		if (Input.GetKey (KeyCode.Z)) {
				
			timeStampActuel = PlayerPrefs.GetInt("temps1",timeStampActuel);
			talent =  PlayerPrefs.GetFloat("talent",talent);
		}
		if (Input.GetKey (KeyCode.E)) {
						PlayerPrefs.SetInt ("temps1", timeStampActuel);
						PlayerPrefs.SetFloat ("temps1", talent);
				}


		talent1Test ();

	}
	void talent1Test () {
		if (Input.GetKey (KeyCode.A)) {
			DateTime timeStampActuel = DateTime.Now;
						talent1Actif = true;
				}
		if ( talent1Actif == true) {
						talent -= Time.deltaTime;
				}
	}
	}

Répondre

Revenir vers « Scripting »