From acb3d796abd0a4fc4cd4c0f84edb50a647ac9398 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 6 Feb 2019 02:54:46 -1100 Subject: [PATCH] Player data --- src/cc/rogue/init.c | 32 ++++++++++++++++++-------------- src/cc/rogue/rogue.c | 12 ++++++++---- src/cc/rogue/rogue.h | 4 +++- src/cc/rogue_rpc.cpp | 29 ++++++++++++++++++++++------- 4 files changed, 51 insertions(+), 26 deletions(-) diff --git a/src/cc/rogue/init.c b/src/cc/rogue/init.c index ff3243ae8..9635ab37b 100644 --- a/src/cc/rogue/init.c +++ b/src/cc/rogue/init.c @@ -22,26 +22,30 @@ */ void rogue_restoreobject(THING *o,struct rogue_packitem *item); -void -init_player(struct rogue_state *rs) +void restore_player(struct rogue_state *rs) +{ + int32_t i; + //rs->P.gold = purse; + max_hp = rs->P.hitpoints; + max_stats.s_str = rs->P.strength; + pstats.s_lvl = rs->P.level; + pstats.s_exp = rs->P.experience; + for (i=0; iP.packsize; i++) + { + obj = new_item(); + rogue_restoreobject(obj,&rs->P.roguepack[i]); + add_pack(rs,obj,TRUE); + } +} + +void init_player(struct rogue_state *rs) { register THING *obj; int32_t i; pstats = max_stats; food_left = HUNGERTIME; - if ( 0 && rogue_restorepack(rs) == 0 ) + if ( rs->restoring != 0 ) { - //rs->P.gold = purse; - max_hp = rs->P.hitpoints; - max_stats.s_str = rs->P.strength; - pstats.s_lvl = rs->P.level; - pstats.s_exp = rs->P.experience; - for (i=0; iP.packsize; i++) - { - obj = new_item(); - rogue_restoreobject(obj,&rs->P.roguepack[i]); - add_pack(rs,obj,TRUE); - } // duplicate rng usage of normal case obj = new_item(); init_weapon(obj, MACE); diff --git a/src/cc/rogue/rogue.c b/src/cc/rogue/rogue.c index 6ea858493..68f77a0cb 100644 --- a/src/cc/rogue/rogue.c +++ b/src/cc/rogue/rogue.c @@ -97,6 +97,8 @@ void rogueiterate(struct rogue_state *rs) start_daemon(doctor, 0, AFTER); fuse(swander, 0, WANDERTIME, AFTER); start_daemon(stomach, 0, AFTER); + if ( rs->restoring != 0 ) + restore_player(rs); playit(rs); } @@ -160,7 +162,7 @@ int32_t flushkeystrokes(struct rogue_state *rs) return(0); } -int32_t rogue_replay2(uint8_t *player,uint64_t seed,char *keystrokes,int32_t num) +int32_t rogue_replay2(uint8_t *newdata,uint64_t seed,char *keystrokes,int32_t num,struct rogue_player *player) { struct rogue_state *rs; FILE *fp; int32_t i; rs = (struct rogue_state *)calloc(1,sizeof(*rs)); @@ -168,6 +170,8 @@ int32_t rogue_replay2(uint8_t *player,uint64_t seed,char *keystrokes,int32_t num rs->keystrokes = keystrokes; rs->numkeys = num; rs->sleeptime = 50000; + if ( player != 0 ) + rs->P = *player; uint32_t starttime = (uint32_t)time(NULL); rogueiterate(rs); /*fprintf(stderr,"elapsed %d seconds\n",(uint32_t)time(NULL) - starttime); @@ -188,8 +192,8 @@ int32_t rogue_replay2(uint8_t *player,uint64_t seed,char *keystrokes,int32_t num if ( (fp= fopen("checkfile","wb")) != 0 ) { save_file(rs,fp,0); - if ( rs->playersize > 0 ) - memcpy(player,rs->playerdata,rs->playersize); + if ( newdata != 0 && rs->playersize > 0 ) + memcpy(newdata,rs->playerdata,rs->playersize); } free(rs); return(rs->playersize); @@ -239,7 +243,7 @@ int32_t rogue_replay(uint64_t seed,int32_t sleeptime) } if ( num > 0 ) { - rogue_replay2(seed,keystrokes,num); + rogue_replay2(0,seed,keystrokes,num,0); mvaddstr(LINES - 2, 0, (char *)"replay completed"); endwin(); } diff --git a/src/cc/rogue/rogue.h b/src/cc/rogue/rogue.h index 4dcee238d..34df75058 100644 --- a/src/cc/rogue/rogue.h +++ b/src/cc/rogue/rogue.h @@ -330,7 +330,7 @@ struct rogue_state uint64_t seed; char *keystrokes; uint32_t needflush,replaydone; - int32_t numkeys,ind,num,guiflag,counter,sleeptime,playersize; + int32_t numkeys,ind,num,guiflag,counter,sleeptime,playersize,restoring; struct rogue_player P; char buffered[8192]; uint8_t playerdata[10000]; @@ -343,6 +343,8 @@ void rogueiterate(struct rogue_state *rs); int32_t roguefname(char *fname,uint64_t seed,int32_t counter); int32_t flushkeystrokes(struct rogue_state *rs); int32_t rogue_restorepack(struct rogue_state *rs); +void restore_player(struct rogue_state *rs); +int32_t rogue_replay2(uint8_t *newdata,uint64_t seed,char *keystrokes,int32_t num,struct rogue_player *player); /* * Help list diff --git a/src/cc/rogue_rpc.cpp b/src/cc/rogue_rpc.cpp index c2afade28..5298c1354 100644 --- a/src/cc/rogue_rpc.cpp +++ b/src/cc/rogue_rpc.cpp @@ -69,7 +69,7 @@ //////////////////////// start of CClib interface -//./komodod -ac_name=ROGUE -ac_supply=1000000 -pubkey= -addnode=5.9.102.210 -ac_cclib=rogue -ac_perc=10000000 -ac_reward=100000000 -ac_cc=60001 -ac_script=2ea22c80203d1579313abe7d8ea85f48c65ea66fc512c878c0d0e6f6d54036669de940febf8103120c008203000401cc & +//./komodod -ac_name=ROGUE -ac_supply=1000000 -pubkey= -addnode=5.9.102.210 -ac_cclib=rogue -ac_perc=10000000 -ac_reward=100000000 -ac_cc=60001 -ac_script=2ea22c80203d1579313abe7d8ea85f48c65ea66fc512c878c0d0e6f6d54036669de940febf8103120c008203000401cc > /dev/null & // cclib newgame 17 \"[3,10]\" // cclib pending 17 @@ -619,7 +619,7 @@ UniValue rogue_highlander(uint64_t txfee,struct CCcontract_info *cp,cJSON *param return(result); } -int32_t rogue_replay2(uint8_t *player,uint64_t seed,char *keystrokes,int32_t num); +#include "rogue/rogue.h" UniValue rogue_bailout(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { @@ -646,17 +646,32 @@ UniValue rogue_bailout(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) { if ( rogue_findbaton(cp,&keystrokes,numkeys,playerdata,batontxid,batonvout,batonvalue,batonht,gametxid,gametx,maxplayers,myrogueaddr) == 0 && keystrokes != 0 ) { - UniValue obj; + UniValue obj; struct rogue_player P; seed = uint64_t rogue_gamefields(obj,maxplayers,buyin,gametxid,myrogueaddr); fprintf(stderr,"found baton %s numkeys.%d seed.%llu\n",batontxid.ToString().c_str(),numkeys,(long long)seed); - num = rogue_replay2(player,seed,keystrokes,numkeys); //4419709268196762041 + if ( playerdata.size() > 0 ) + { + for (i=0; ievalcode,batonvalue-txfee,roguepk)); + if ( num == sizeof(P) ) + { + newdata.resize(num); + for (i=0; i_o._o_type,o->_o._o_packch,o->_o._o_packch); + } Myprivkey(mypriv); CCaddr1of2set(cp,roguepk,mypk,mypriv,destaddr); rawtx = FinalizeCCTx(0,cp,mtx,mypk,txfee,rogue_highlanderopret(gametxid,mypk,newdata));