Commit a5dce932 authored by nanahira's avatar nanahira

refa pre_seed to base64

parent be81756e
......@@ -71,7 +71,8 @@ void DuelInfo::Clear() {
#ifdef YGOPRO_SERVER_MODE
unsigned short server_port;
unsigned short replay_mode;
unsigned int pre_seed[3];
uint32_t pre_seed[MAX_MATCH_COUNT][SEED_COUNT];
uint8_t pre_seed_specified[MAX_MATCH_COUNT];
HostInfo game_info;
void Game::MainServerLoop() {
......
......@@ -654,10 +654,13 @@ public:
extern Game* mainGame;
#ifdef YGOPRO_SERVER_MODE
#define MAX_MATCH_COUNT 3
extern unsigned short server_port;
extern unsigned short replay_mode;
extern HostInfo game_info;
extern unsigned int pre_seed[3];
extern uint32_t pre_seed[MAX_MATCH_COUNT][SEED_COUNT];
extern uint8_t pre_seed_specified[MAX_MATCH_COUNT];
#endif
}
......
......@@ -7,6 +7,9 @@
#ifdef __APPLE__
#import <CoreFoundation/CoreFoundation.h>
#endif
#ifdef YGOPRO_SERVER_MODE
#include "base64.h"
#endif
unsigned int enable_log = 0x3;
#ifndef YGOPRO_SERVER_MODE
......@@ -82,8 +85,8 @@ int main(int argc, char* argv[]) {
ygo::game_info.no_shuffle_deck = false;
ygo::game_info.duel_rule = DEFAULT_DUEL_RULE;
ygo::game_info.time_limit = 180;
for (int i = 0; i < 3; ++i)
ygo::pre_seed[i] = (unsigned int)0;
std::memset(ygo::pre_seed, 0, sizeof(ygo::pre_seed));
std::memset(ygo::pre_seed_specified, 0, sizeof(ygo::pre_seed_specified));
if (argc > 1) {
ygo::server_port = atoi(argv[1]);
int lflist = atoi(argv[2]);
......@@ -119,9 +122,18 @@ int main(int argc, char* argv[]) {
ygo::game_info.draw_count = atoi(argv[10]);
ygo::game_info.time_limit = atoi(argv[11]);
ygo::replay_mode = atoi(argv[12]);
for (int i = 13; (i < argc && i <= 15) ; ++i)
for (int i = 13; (i < argc && i < (13 + MAX_MATCH_COUNT)) ; ++i)
{
ygo::pre_seed[i - 13] = (unsigned int)atol(argv[i]);
auto ok = Base64::Decode(
reinterpret_cast<const unsigned char*>(argv[i]),
strlen(argv[i]),
reinterpret_cast<unsigned char*>(ygo::pre_seed[i - 13]),
SEED_COUNT * sizeof(uint32_t)
);
if(ok)
ygo::pre_seed_specified[i - 13] = 1;
else
std::fprintf(stderr, "Failed to decode seed %d: %s\n", i - 13, argv[i]);
}
}
ygo::mainGame = &_game;
......
......@@ -517,8 +517,8 @@ void TagDuel::TPResult(DuelPlayer* dp, unsigned char tp) {
rh.base.flag = REPLAY_UNIFORM | REPLAY_TAG;
rh.base.start_time = (uint32_t)std::time(nullptr);
#ifdef YGOPRO_SERVER_MODE
if(pre_seed_specified[duel_count])
memcpy(rh.seed_sequence, pre_seed[duel_count], SEED_COUNT * sizeof(uint32_t));
if(pre_seed_specified[0])
memcpy(rh.seed_sequence, pre_seed[0], SEED_COUNT * sizeof(uint32_t));
else
#endif
for (auto& x : rh.seed_sequence)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment