// ******************************************************************************************** bool scrSkDoResearch(void) { SDWORD player, bias;//,timeToResearch;//,*x,*y; UWORD i; STRUCTURE *psBuilding; RESEARCH_FACILITY *psResFacilty; if (!stackPopParams(3, ST_STRUCTURE, &psBuilding, VAL_INT, &player, VAL_INT, &bias)) { return false; } psResFacilty = (RESEARCH_FACILITY*)psBuilding->pFunctionality; if(psResFacilty->psSubject != NULL) { // not finshed yet.. return true; } // choose a topic to complete. for(i=0; i < numResearch; i++) { if (skTopicAvail(i, player) && (!bMultiPlayer || !beingResearchedByAlly(i, player))) { break; } } if(i != numResearch) { sendResearchStatus(psBuilding, i, player, true); // inform others, I'm researching this. #if defined (DEBUG) { char sTemp[128]; sprintf(sTemp,"[debug]player:%d starts topic: %s",player, asResearch[i].pName ); NETlogEntry(sTemp, SYNC_FLAG, 0); } #endif } return true; }
// ******************************************************************************************** BOOL scrSkDoResearch(void) { SDWORD structure, player, bias;//,timeToResearch;//,*x,*y; UWORD i; STRING sTemp[128]; STRUCTURE *psBuilding; RESEARCH_FACILITY *psResFacilty; PLAYER_RESEARCH *pPlayerRes; RESEARCH *pResearch; if (!stackPopParams(3,ST_STRUCTURE, &structure, VAL_INT, &player, VAL_INT,&bias )) { return FALSE; } psBuilding = (STRUCTURE *) structure; psResFacilty = (RESEARCH_FACILITY*)psBuilding->pFunctionality; if(psResFacilty->psSubject != NULL) { // not finshed yet.. return TRUE; } // choose a topic to complete. for(i=0;i<numResearch;i++) { if( skTopicAvail(i,player) ) { break; } } if(i != numResearch) { pResearch = (asResearch+i); pPlayerRes = asPlayerResList[player]+ i; psResFacilty->psSubject = (BASE_STATS*)pResearch; //set the subject up if (IsResearchCancelled(pPlayerRes)) { psResFacilty->powerAccrued = pResearch->researchPower;//set up as if all power available for cancelled topics } else { psResFacilty->powerAccrued = 0; } MakeResearchStarted(pPlayerRes); psResFacilty->timeStarted = ACTION_START_TIME; psResFacilty->timeStartHold = 0; psResFacilty->timeToResearch = pResearch->researchPoints / psResFacilty->researchPoints; if (psResFacilty->timeToResearch == 0) { psResFacilty->timeToResearch = 1; } sprintf(sTemp,"player:%d starts topic: %s",player, asResearch[i].pName ); NETlogEntry(sTemp,0,0); } return TRUE; /* // do it. if(i != numResearch) { researchResult(i,(UBYTE)player,FALSE); sprintf(sTemp,"player:%d did topic: %s",player, asResearch[i].pName ); NETlogEntry(sTemp,0,0); SendResearch((UBYTE)player,i ); } // set delay for next topic. timeToResearch = (asResearch+i)->researchPoints / ((RESEARCH_FACILITY*)psResearch->pFunctionality)->researchPoints;; if (!stackPushResult(VAL_INT, timeToResearch)) // return time to do it.. { return FALSE; } */ // UDWORD count; }