Player data
This commit is contained in:
@@ -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; i<rs->P.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; i<rs->P.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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
|
||||
|
||||
//////////////////////// start of CClib interface
|
||||
//./komodod -ac_name=ROGUE -ac_supply=1000000 -pubkey=<yourpubkey> -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=<yourpubkey> -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; i<playerdata.size(); i++)
|
||||
((uint8_t *)&P)[i] = playerdata[i];
|
||||
}
|
||||
num = rogue_replay2(player,seed,keystrokes,numkeys,playerdata.size()==0?0:&P); //4419709268196762041
|
||||
free(keystrokes);
|
||||
newdata.resize(num);
|
||||
for (i=0; i<num; i++)
|
||||
newdata[i] = player[i];
|
||||
mtx.vin.push_back(CTxIn(batontxid,batonvout,CScript()));
|
||||
// also need a vin from gametx
|
||||
mtx.vout.push_back(MakeCC1vout(cp->evalcode,batonvalue-txfee,roguepk));
|
||||
if ( num == sizeof(P) )
|
||||
{
|
||||
newdata.resize(num);
|
||||
for (i=0; i<num; i++)
|
||||
{
|
||||
newdata[i] = player[i];
|
||||
((uint8_t *)&P)[i] = player[i];
|
||||
}
|
||||
fprintf(stderr,"gold.%d hp.%d strength.%d level.%d exp.%d %d dl.%d\n",P.gold,P.hitpoints,P.strength,P.level,P.experience,P.dungeonlevel);
|
||||
mtx.vout.push_back(CTxOut(P.gold*1000000,CScript() << ParseHex(HexStr(mypk)) << OP_CHECKSIG));
|
||||
//for (i=0; i<P.packsize; i++)
|
||||
// fprintf(stderr,"object (%s) type.%d pack.(%c:%d)\n",inv_name(o,FALSE),o->_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));
|
||||
|
||||
Reference in New Issue
Block a user