Gold * gold payout algo change
This commit is contained in:
@@ -947,6 +947,56 @@ UniValue rogue_extract(uint64_t txfee,struct CCcontract_info *cp,cJSON *params)
|
|||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t rogue_playerdata_validate(uint256 &playertxid,struct CCcontract_info *cp,std::vector<uint8_t> playerdata,uint256 gametxid,CPubKey pk)
|
||||||
|
{
|
||||||
|
static uint32_t good,bad; static uint256 prevgame;
|
||||||
|
char str[512],*keystrokes,rogueaddr[64],str2[67]; int32_t i,numkeys; std::vector<uint8_t> newdata; uint64_t seed; CPubKey roguepk; struct rogue_player P;
|
||||||
|
if ( gametxid == prevgame )
|
||||||
|
return(0);
|
||||||
|
prevgame = gametxid;
|
||||||
|
roguepk = GetUnspendable(cp,0);
|
||||||
|
GetCCaddress1of2(cp,rogueaddr,roguepk,pk);
|
||||||
|
//fprintf(stderr,"call extractgame\n");
|
||||||
|
if ( (keystrokes= rogue_extractgame(0,str,&numkeys,newdata,seed,playertxid,cp,gametxid,rogueaddr)) != 0 )
|
||||||
|
{
|
||||||
|
//fprintf(stderr,"numkeys.%d rogue_extractgame %s\n",numkeys,gametxid.GetHex().c_str());
|
||||||
|
free(keystrokes);
|
||||||
|
//fprintf(stderr,"extracted.(%s)\n",str);
|
||||||
|
if ( newdata == playerdata )
|
||||||
|
{
|
||||||
|
good++;
|
||||||
|
fprintf(stderr,"%s good.%d bad.%d\n",gametxid.GetHex().c_str(),good,bad);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
newdata[10] = newdata[11] = playerdata[10] = playerdata[11] = 0;
|
||||||
|
if ( newdata == playerdata )
|
||||||
|
{
|
||||||
|
good++;
|
||||||
|
fprintf(stderr,"%s matched after clearing maxstrength good.%d bad.%d\n",gametxid.GetHex().c_str(),good,bad);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
for (i=0; i<playerdata.size(); i++)
|
||||||
|
((uint8_t *)&P)[i] = playerdata[i];
|
||||||
|
if ( P.gold <= 0 || P.hitpoints <= 0 || (P.strength&0xffff) <= 0 || P.level <= 0 || P.experience <= 0 || P.dungeonlevel <= 0 )
|
||||||
|
{
|
||||||
|
P.gold = (P.gold * 8) / 10;
|
||||||
|
for (i=0; i<playerdata.size(); i++)
|
||||||
|
playerdata[i] = ((uint8_t *)&P)[i];
|
||||||
|
if ( newdata.size() == 0 )
|
||||||
|
{
|
||||||
|
good++;
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
fprintf(stderr,"zero value character was killed -> no playerdata, good.%d bad.%d\n",good,bad);
|
||||||
|
}
|
||||||
|
bad++;
|
||||||
|
fprintf(stderr,"%s playerdata: gold.%d hp.%d strength.%d/%d level.%d exp.%d dl.%d\n",gametxid.GetHex().c_str(),P.gold,P.hitpoints,P.strength&0xffff,P.strength>>16,P.level,P.experience,P.dungeonlevel);
|
||||||
|
fprintf(stderr,"newdata[%d] != playerdata[%d], numkeys.%d %s pub.%s playertxid.%s good.%d bad.%d\n",(int32_t)newdata.size(),(int32_t)playerdata.size(),numkeys,rogueaddr,pubkey33_str(str2,(uint8_t *)&pk),playertxid.GetHex().c_str(),good,bad);
|
||||||
|
}
|
||||||
|
//fprintf(stderr,"no keys rogue_extractgame %s\n",gametxid.GetHex().c_str());
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
|
||||||
UniValue rogue_finishgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *params,char *method)
|
UniValue rogue_finishgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *params,char *method)
|
||||||
{
|
{
|
||||||
//vin0 -> highlander vout from creategame TCBOO
|
//vin0 -> highlander vout from creategame TCBOO
|
||||||
@@ -975,12 +1025,12 @@ UniValue rogue_finishgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *param
|
|||||||
if ( strcmp(method,"bailout") == 0 )
|
if ( strcmp(method,"bailout") == 0 )
|
||||||
{
|
{
|
||||||
funcid = 'Q';
|
funcid = 'Q';
|
||||||
mult = 100000;
|
mult = 100; //100000;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
funcid = 'H';
|
funcid = 'H';
|
||||||
mult = 200000;
|
mult = 200; //200000;
|
||||||
}
|
}
|
||||||
if ( params != 0 && (n= cJSON_GetArraySize(params)) > 0 )
|
if ( params != 0 && (n= cJSON_GetArraySize(params)) > 0 )
|
||||||
{
|
{
|
||||||
@@ -1005,7 +1055,7 @@ UniValue rogue_finishgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *param
|
|||||||
{
|
{
|
||||||
num = rogue_replay2(player,seed,keystrokes,numkeys,playerdata.size()==0?0:&P,0);
|
num = rogue_replay2(player,seed,keystrokes,numkeys,playerdata.size()==0?0:&P,0);
|
||||||
if ( keystrokes != 0 )
|
if ( keystrokes != 0 )
|
||||||
free(keystrokes);
|
free(keystrokes), keystrokes = 0;
|
||||||
} else num = 0;
|
} else num = 0;
|
||||||
mtx.vin.push_back(CTxIn(batontxid,batonvout,CScript()));
|
mtx.vin.push_back(CTxIn(batontxid,batonvout,CScript()));
|
||||||
mtx.vin.push_back(CTxIn(gametxid,1+maxplayers+regslot,CScript()));
|
mtx.vin.push_back(CTxIn(gametxid,1+maxplayers+regslot,CScript()));
|
||||||
@@ -1034,7 +1084,7 @@ UniValue rogue_finishgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *param
|
|||||||
mtx.vout.push_back(MakeTokensCC1vout(cp->evalcode,1,mypk));
|
mtx.vout.push_back(MakeTokensCC1vout(cp->evalcode,1,mypk));
|
||||||
if ( P.amulet != 0 )
|
if ( P.amulet != 0 )
|
||||||
mult *= 5;
|
mult *= 5;
|
||||||
cashout = (uint64_t)P.gold * mult;
|
cashout = (uint64_t)P.gold * P.gold * mult;
|
||||||
fprintf(stderr,"\nextracted $$$gold.%d -> %.8f ROGUE hp.%d strength.%d/%d level.%d exp.%d dl.%d n.%d amulet.%d\n",P.gold,(double)cashout/COIN,P.hitpoints,P.strength&0xffff,P.strength>>16,P.level,P.experience,P.dungeonlevel,n,P.amulet);
|
fprintf(stderr,"\nextracted $$$gold.%d -> %.8f ROGUE hp.%d strength.%d/%d level.%d exp.%d dl.%d n.%d amulet.%d\n",P.gold,(double)cashout/COIN,P.hitpoints,P.strength&0xffff,P.strength>>16,P.level,P.experience,P.dungeonlevel,n,P.amulet);
|
||||||
if ( funcid == 'H' && maxplayers > 1 )
|
if ( funcid == 'H' && maxplayers > 1 )
|
||||||
{
|
{
|
||||||
@@ -1051,7 +1101,6 @@ UniValue rogue_finishgame(uint64_t txfee,struct CCcontract_info *cp,cJSON *param
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
mtx.vout.push_back(MakeCC1vout(cp->evalcode,CCchange + (batonvalue-3*txfee),roguepk));
|
mtx.vout.push_back(MakeCC1vout(cp->evalcode,CCchange + (batonvalue-3*txfee),roguepk));
|
||||||
|
|
||||||
Myprivkey(mypriv);
|
Myprivkey(mypriv);
|
||||||
CCaddr1of2set(cp,roguepk,mypk,mypriv,myrogueaddr);
|
CCaddr1of2set(cp,roguepk,mypk,mypriv,myrogueaddr);
|
||||||
CScript opret;
|
CScript opret;
|
||||||
@@ -1245,53 +1294,6 @@ UniValue rogue_setname(uint64_t txfee,struct CCcontract_info *cp,cJSON *params)
|
|||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t rogue_playerdata_validate(uint256 &playertxid,struct CCcontract_info *cp,std::vector<uint8_t> playerdata,uint256 gametxid,CPubKey pk)
|
|
||||||
{
|
|
||||||
static uint32_t good,bad; static uint256 prevgame;
|
|
||||||
char str[512],*keystrokes,rogueaddr[64],str2[67]; int32_t i,numkeys; std::vector<uint8_t> newdata; uint64_t seed; CPubKey roguepk; struct rogue_player P;
|
|
||||||
if ( gametxid == prevgame )
|
|
||||||
return(0);
|
|
||||||
prevgame = gametxid;
|
|
||||||
roguepk = GetUnspendable(cp,0);
|
|
||||||
GetCCaddress1of2(cp,rogueaddr,roguepk,pk);
|
|
||||||
//fprintf(stderr,"call extractgame\n");
|
|
||||||
if ( (keystrokes= rogue_extractgame(0,str,&numkeys,newdata,seed,playertxid,cp,gametxid,rogueaddr)) != 0 )
|
|
||||||
{
|
|
||||||
//fprintf(stderr,"numkeys.%d rogue_extractgame %s\n",numkeys,gametxid.GetHex().c_str());
|
|
||||||
free(keystrokes);
|
|
||||||
//fprintf(stderr,"extracted.(%s)\n",str);
|
|
||||||
if ( newdata == playerdata )
|
|
||||||
{
|
|
||||||
good++;
|
|
||||||
fprintf(stderr,"%s good.%d bad.%d\n",gametxid.GetHex().c_str(),good,bad);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
newdata[10] = newdata[11] = playerdata[10] = playerdata[11] = 0;
|
|
||||||
if ( newdata == playerdata )
|
|
||||||
{
|
|
||||||
good++;
|
|
||||||
fprintf(stderr,"%s matched after clearing maxstrength good.%d bad.%d\n",gametxid.GetHex().c_str(),good,bad);
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
for (i=0; i<playerdata.size(); i++)
|
|
||||||
((uint8_t *)&P)[i] = playerdata[i];
|
|
||||||
if ( P.gold <= 0 || P.hitpoints <= 0 || (P.strength&0xffff) <= 0 || P.level <= 0 || P.experience <= 0 || P.dungeonlevel <= 0 )
|
|
||||||
{
|
|
||||||
fprintf(stderr,"zero value character was killed -> no playerdata, good.%d bad.%d\n",good,bad);
|
|
||||||
if ( newdata.size() == 0 )
|
|
||||||
{
|
|
||||||
good++;
|
|
||||||
return(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bad++;
|
|
||||||
fprintf(stderr,"%s playerdata: gold.%d hp.%d strength.%d/%d level.%d exp.%d dl.%d\n",gametxid.GetHex().c_str(),P.gold,P.hitpoints,P.strength&0xffff,P.strength>>16,P.level,P.experience,P.dungeonlevel);
|
|
||||||
fprintf(stderr,"newdata[%d] != playerdata[%d], numkeys.%d %s pub.%s playertxid.%s good.%d bad.%d\n",(int32_t)newdata.size(),(int32_t)playerdata.size(),numkeys,rogueaddr,pubkey33_str(str2,(uint8_t *)&pk),playertxid.GetHex().c_str(),good,bad);
|
|
||||||
}
|
|
||||||
//fprintf(stderr,"no keys rogue_extractgame %s\n",gametxid.GetHex().c_str());
|
|
||||||
return(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool rogue_validate(struct CCcontract_info *cp,int32_t height,Eval *eval,const CTransaction tx)
|
bool rogue_validate(struct CCcontract_info *cp,int32_t height,Eval *eval,const CTransaction tx)
|
||||||
{
|
{
|
||||||
CScript scriptPubKey; std::vector<uint8_t> vopret; uint8_t *script,e,f,funcid; int32_t i,maxplayers,decoded=0,regslot,ind,err,dispflag,gameheight,score,numvouts; CTransaction vintx,gametx; CPubKey pk; uint256 hashBlock,gametxid,tokenid,batontxid,playertxid,ptxid; int64_t buyin; std::vector<uint8_t> playerdata,keystrokes; std::string symbol,pname;
|
CScript scriptPubKey; std::vector<uint8_t> vopret; uint8_t *script,e,f,funcid; int32_t i,maxplayers,decoded=0,regslot,ind,err,dispflag,gameheight,score,numvouts; CTransaction vintx,gametx; CPubKey pk; uint256 hashBlock,gametxid,tokenid,batontxid,playertxid,ptxid; int64_t buyin; std::vector<uint8_t> playerdata,keystrokes; std::string symbol,pname;
|
||||||
|
|||||||
Reference in New Issue
Block a user