After check and do some test, i think we must mark time every player do event at :pakdoid();
then get time amount from pakdoid to start new quest;
and add it to time formula that send to client.
this is my change and time send to client more better then above code;
-
- long int lastdoid_times = 0;
- long int databatasquest = 1310720;
-
- BEGINPACKET (pak, 0x723);
- for(dword i = 0; i < 5; i++) ADDWORD( pak, quest.EpisodeVar[i]);
- for(dword i = 0; i < 3; i++) ADDWORD( pak, quest.JobVar[i]);
- for(dword i = 0; i < 7; i++) ADDWORD( pak, quest.PlanetVar[i]);
- for(dword i = 0; i < 10; i++) ADDWORD( pak, quest.UnionVar[i]);
-
- for( unsigned i = 0; i < 10; i++ )
- {
- ADDWORD( pak, quest.quests[i].QuestID );
- long int Time = 0;
-
- if (quest.quests[i].QuestID > 0 && GServer->STB_QUEST.rows[quest.quests[i].QuestID][1] > 0)
- {
- Time += quest.quests[i].StartTime; // Start time
- Time += GServer->STB_QUEST.rows[quest.quests[i].QuestID][1]*10;
- Time -= time(NULL); // Current time
- if (Time < 0) Time = 0; // Time is up
-
- lastdoid_times = (time(NULL)-Status->awalstartquest); //awalstartquest = time when player do pakdoid.
- Time += databatasquest+lastdoid_times;
- Time = Time/10;
- }
- ADDDWORD( pak, Time ); // Time Left
-
note: this code test on local server and single player.