void EQPlayer::updateLevel(const levelUpStruct *levelup) { QString totalExp; QString gainedExp; QString leftExp; QString needKills; QString tempStr; totalExp = Commanate(levelup->exp); gainedExp = Commanate((uint32_t) (levelup->exp - m_currentExp)); needKills = Commanate(((calc_exp( levelup->level, getPlayerRace (), getPlayerClass () ) - levelup->exp ) / ( levelup->exp > m_currentExp ? levelup->exp - m_currentExp : 1 ) ) ); tempStr = QString("Exp: %1 (%2) [%3]").arg(totalExp).arg(gainedExp).arg(needKills); emit expChangedStr (tempStr); m_defaultLevel = levelup->level; m_playerLevel = levelup->level; m_maxExp = calc_exp( getPlayerLevel (), getPlayerRace (), getPlayerClass () ); emit expChangedInt( levelup->exp, calc_exp( getPlayerLevel () - 1, getPlayerRace (), getPlayerClass () ), calc_exp( getPlayerLevel (), getPlayerRace (), getPlayerClass () ) ); m_currentExp = levelup->exp; m_validExp = true; // update the con table fillConTable(); }
void EQPlayer::reset() { memset(&m_thePlayer, 0, sizeof(playerProfileStruct)); setUseDefaults(true); m_currentExp = 0; m_maxExp = calc_exp(getPlayerLevel(), getPlayerRace(), getPlayerClass()); for (int a = 0; a < MAX_KNOWN_SKILLS; a++) m_playerSkills[a] = 255; // indicate an invalid value for (int a = 0; a < MAX_KNOWN_LANGS; a++) m_playerLanguages[a] = 255; // indicate an invalid value setPlayerLevel (1); setPlayerRace (1); setPlayerClass (1); emit deleteSkills(); emit deleteLanguages(); m_validExp = false; m_validAttributes = false; // update the con table fillConTable(); }
void calc_exp( int hd[], int cg, int tk, int pointhd[], int pointnum, int deck[], int decknum, int recursioncount, int starthd ) { int nexthd[HNUM]; int nextdeck[CNUM]; int point = 0; int i, j; for ( i = starthd; i < HNUM; i++) { for ( j = 0; j < CNUM; j++) { // 山札にカードがあれば if ( deck[j] == 0 ) { // 手札とデッキの複製 arr_copy( nexthd, hd, HNUM ); nexthd[i] = j; arr_copy( nextdeck, deck, CNUM ); nextdeck[j] = -1; if ( recursioncount == 1 ) { // 一手目の期待値の加算 pointhd[i] += point_convert(poker_point(nexthd))*decknum; } else { // 二手目の期待値の加算 point = point_convert(poker_point(nexthd)); pointhd[pointnum] += point; if ( pointnum < i ) { pointhd[i] += point; } } if ( cg > 7 - RECURSION_LIMIT ) { continue; } if ( recursioncount >= RECURSION_LIMIT ) { continue; } // 再帰呼び出し if ( pointnum == -1 ) { calc_exp( nexthd, cg+1, tk, pointhd, i, nextdeck, decknum-1, recursioncount+1, i ); } else { calc_exp( nexthd, cg+1, tk, pointhd, pointnum, nextdeck, decknum-1, recursioncount+1, i ); } } } } }
int command_calc(char *text, int len) { double res; char str[100]; int calcerr; res = calc_exp(text, &calcerr); switch (calcerr){ case CALCERR_OK: if (trunc(res)==res) safe_snprintf (str,sizeof(str), "%s = %.0f",text,res); else safe_snprintf (str,sizeof(str), "%s = %.2f",text,res); LOG_TO_CONSOLE (c_orange1, str); break; case CALCERR_SYNTAX: safe_snprintf (str,sizeof(str), "%s = Syntax error",text); LOG_TO_CONSOLE (c_orange1, str); break; case CALCERR_DIVIDE: safe_snprintf (str, sizeof(str),"%s = Divide by zero",text); LOG_TO_CONSOLE (c_orange1, str); break; case CALCERR_MEM: safe_snprintf (str,sizeof(str), "%s = Memory error",text); LOG_TO_CONSOLE (c_orange1, str); break; case CALCERR_XOPSYNTAX: safe_snprintf (str,sizeof(str), "%s = Bad argument for X", text); LOG_TO_CONSOLE (c_orange1, str); break; case CALCERR_LOPSYNTAX: safe_snprintf (str,sizeof(str), "%s = Bad argument for L", text); LOG_TO_CONSOLE (c_orange1, str); break; case CALCERR_EOPSYNTAX: safe_snprintf (str,sizeof(str), "%s = Bad argument for E", text); LOG_TO_CONSOLE (c_orange1, str); break; case CALCERR_NOPSYNTAX: safe_snprintf (str,sizeof(str), "%s = Bad argument for N", text); LOG_TO_CONSOLE (c_orange1, str); break; case CALCERR_ZOPSYNTAX: safe_snprintf (str,sizeof(str), "%s = Bad argument for Z", text); LOG_TO_CONSOLE (c_orange1, str); break; case CALCERR_QOPSYNTAX: safe_snprintf (str,sizeof(str), "%s = Bad argument for Q", text); LOG_TO_CONSOLE (c_orange1, str); break; } return 1; }
int select_card( int hd[], int cg, int tk, int ud[], int us, int deck[], int decknum ) { int hightexp = ( decknum > 1 ) ? poker_point(hd)*decknum*(decknum-1) : poker_point(hd)*decknum; int select = -1; int recursioncount = 1; int pointhd[HNUM] = { 0 }; // 期待値を格納 int i; calc_exp( hd, cg, tk, pointhd, -1, deck, decknum, recursioncount, 0); for ( i = 0; i < HNUM; i++) { if ( pointhd[i] > hightexp ) { hightexp = pointhd[i]; select = i; } } return select; }
PUBLIC struct seg_des *seg_static_load(struct comal_line *line) { struct proc_func_rec *pf = &line->lc.pfrec; struct string *name; enum VAL_TYPE type; struct seg_des *seg; calc_exp(pf->external->filename, (void **) &name, &type); seg = mem_alloc(RUN_POOL, sizeof(struct seg_des)); seg->lineroot = expand_fromfile(name->s); mem_free(name); seg->extdef = line; seg->save_localproc = line->lc.pfrec.localproc; seg_total_scan(seg); seg_proccheck(line, seg->procdef); seg->prev = NULL; pf->external->seg = seg; return seg; }
/* main */ int main (int argc, char** argv) { unsigned int calc_mod = 0; double idata = 0; double kdata = 0; double result = 0; if(argc < 2 || argc > 4) { printf("enter cmd numbers must greater than 2 and less than 5!!!\n\n"); printf("命令格式如下所示:\n"); printf("./calc_sim 1 xxx xxx add\n"); printf("./calc_sim 2 xxx xxx sub\n"); printf("./calc_sim 3 xxx xxx multi\n"); printf("./calc_sim 4 xxx xxx div\n"); printf("./calc_sim 5 PI\n"); printf("./calc_sim 6 xxx sin\n"); printf("./calc_sim 7 xxx cos\n"); printf("./calc_sim 8 xxx tan\n"); printf("./calc_sim 9 xxx fabs\n"); printf("./calc_sim 10 xxx exp\n"); printf("./calc_sim 11 xxx log\n"); printf("./calc_sim 12 xxx log10\n"); printf("./calc_sim 13 xxx xxx pow\n"); printf("./calc_sim 14 rand\n"); return -1; } argv++; calc_mod=atoi(*argv); if(calc_mod < 1 || calc_mod > 14){ printf("命令格式如下所示:\n"); printf("./calc_sim 1 xxx xxx add\n"); printf("./calc_sim 2 xxx xxx sub\n"); printf("./calc_sim 3 xxx xxx multi\n"); printf("./calc_sim 4 xxx xxx div\n"); printf("./calc_sim 5 PI\n"); printf("./calc_sim 6 xxx sin\n"); printf("./calc_sim 7 xxx cos\n"); printf("./calc_sim 8 xxx tan\n"); printf("./calc_sim 9 xxx fabs\n"); printf("./calc_sim 10 xxx exp\n"); printf("./calc_sim 11 xxx log\n"); printf("./calc_sim 12 xxx log10\n"); printf("./calc_sim 13 xxx xxx pow\n"); printf("./calc_sim 14 rand\n"); return -1; } if(argc==2){ printf("Enter is mod<%d> \n", calc_mod); switch(calc_mod){ case 5: result = calc_PI(); printf("calc PI result is %f\n",result); break; case 14: result = calc_rand(); printf("calc rand result is %f\n",result); break; default: if(calc_mod==1) printf("add 格式:./calc_sim 1 xxx xxx\n"); if(calc_mod==2) printf("sub 格式:./calc_sim 2 xxx xxx\n"); if(calc_mod==3) printf("multi 格式:./calc_sim 3 xxx xxx\n"); if(calc_mod==4) printf("div 格式:./calc_sim 4 xxx xxx\n"); if(calc_mod==5) printf("PI 格式:./calc_sim 5\n"); if(calc_mod==6) printf("sin 格式:./calc_sim 6 xxx\n"); if(calc_mod==7) printf("cos 格式:./calc_sim 7 xxx\n"); if(calc_mod==8) printf("tan 格式:./calc_sim 8 xxx\n"); if(calc_mod==9) printf("fabs 格式:./calc_sim 9 xxx\n"); if(calc_mod==10) printf("exp 格式:./calc_sim 10 xxx\n"); if(calc_mod==11) printf("log 格式:./calc_sim 11 xxx\n"); if(calc_mod==12) printf("log10 格式:./calc_sim 12 xxx\n"); if(calc_mod==13) printf("pow 格式:./calc_sim 13 xxx xxx\n"); if(calc_mod==14) printf("rand 格式:./calc_sim 14\n"); break; } } if(argc==3){ argv ++; idata = atof(*argv); printf("Enter is mod<%d> data_f<%f> \n", calc_mod, idata); switch(calc_mod){ case 6: result = calc_sin(idata); printf("calc sin (%f) result is %f\n",idata,result); break; case 7: result = calc_cos(idata); printf("calc cos (%f) result is %f\n",idata,result); break; case 8: result = calc_tan(idata); printf("calc tan (%f) result is %f\n",idata,result); break; case 9: result = calc_fabs(idata); printf("calc fabs (%f) result is %f\n",idata,result); break; case 10: result = calc_exp(idata); printf("calc exp (%f) result is %f\n",idata,result); break; case 11: if(idata<=0){ printf("真数必须大于0\n"); break; } result = calc_log(idata); printf("calc log (%f) result is %f\n",idata,result); break; case 12: if(idata<=0){ printf("真数必须大于0\n"); break; } result = calc_log10(idata); printf("calc log10 (%f) result is %f\n",idata,result); break; default: if(calc_mod==1) printf("add 格式:./calc_sim 1 xxx xxx\n"); if(calc_mod==2) printf("sub 格式:./calc_sim 2 xxx xxx\n"); if(calc_mod==3) printf("multi 格式:./calc_sim 3 xxx xxx\n"); if(calc_mod==4) printf("div 格式:./calc_sim 4 xxx xxx\n"); if(calc_mod==5) printf("PI 格式:./calc_sim 5\n"); if(calc_mod==6) printf("sin 格式:./calc_sim 6 xxx\n"); if(calc_mod==7) printf("cos 格式:./calc_sim 7 xxx\n"); if(calc_mod==8) printf("tan 格式:./calc_sim 8 xxx\n"); if(calc_mod==9) printf("fabs 格式:./calc_sim 9 xxx\n"); if(calc_mod==10) printf("exp 格式:./calc_sim 10 xxx\n"); if(calc_mod==11) printf("log 格式:./calc_sim 11 xxx\n"); if(calc_mod==12) printf("log10 格式:./calc_sim 12 xxx\n"); if(calc_mod==13) printf("pow 格式:./calc_sim 13 xxx xxx\n"); if(calc_mod==14) printf("rand 格式:./calc_sim 14\n"); break; } } if(argc==4){ argv ++; idata = atof(*argv); argv ++; kdata = atof(*argv); printf("Enter is mod<%d> data_f<%f> data_b<%f> \n", calc_mod, idata, kdata); switch(calc_mod) { case 1: result = calc_add(idata, kdata); printf("Calc add (%f + %f) result is %f\n", idata, kdata, result); break; case 2: result = calc_sub(idata, kdata); printf("Calc sub (%f - %f) result is %f\n", idata, kdata, result); break; case 3: result = calc_multi(idata,kdata); printf("calc multi(%f * %f) result is %f\n",idata,kdata,result); break; case 4: if(kdata==0){ printf("除数不能为0\n"); break;} else result = calc_div(idata,kdata); printf("calc div(%f / %f) result is %f\n",idata,kdata,result); break; case 13: result = calc_pow(idata,kdata); printf("calc pow (%f , %f) result is %f\n",idata,kdata,result); break; default: if(calc_mod==1) printf("add 格式:./calc_sim 1 xxx xxx\n"); if(calc_mod==2) printf("sub 格式:./calc_sim 2 xxx xxx\n"); if(calc_mod==3) printf("multi 格式:./calc_sim 3 xxx xxx\n"); if(calc_mod==4) printf("div 格式:./calc_sim 4 xxx xxx\n"); if(calc_mod==5) printf("PI 格式:./calc_sim 5\n"); if(calc_mod==6) printf("sin 格式:./calc_sim 6 xxx\n"); if(calc_mod==7) printf("cos 格式:./calc_sim 7 xxx\n"); if(calc_mod==8) printf("tan 格式:./calc_sim 8 xxx\n"); if(calc_mod==9) printf("fabs 格式:./calc_sim 9 xxx\n"); if(calc_mod==10) printf("exp 格式:./calc_sim 10 xxx\n"); if(calc_mod==11) printf("log 格式:./calc_sim 11 xxx\n"); if(calc_mod==12) printf("log10 格式:./calc_sim 12 xxx\n"); if(calc_mod==13) printf("pow 格式:./calc_sim 13 xxx xxx\n"); if(calc_mod==14) printf("rand 格式:./calc_sim 14\n"); break; } } return 0; }
void EQPlayer::updateExp(const expUpdateStruct* exp) { QString totalExp; QString gainedExp; QString leftExp; QString needKills; QString tempStr; if (m_currentExp > 0) { totalExp = Commanate(exp->exp); gainedExp = Commanate((uint32_t) (exp->exp - m_currentExp)); needKills = Commanate((( calc_exp( getPlayerLevel (), getPlayerRace (), getPlayerClass () ) - exp->exp ) / ( exp->exp > m_currentExp ? exp->exp - m_currentExp : 1 ) ) + 1 ); leftExp = Commanate((( calc_exp( getPlayerLevel (), getPlayerRace (), getPlayerClass () ) ) - ( calc_exp( getPlayerLevel () - 1, getPlayerRace (), getPlayerClass () ) ) ) - ( exp->exp - ( calc_exp( getPlayerLevel () - 1, getPlayerRace (), getPlayerClass () ) ) ) ); tempStr = QString("Exp: %1 (%2) [%3]").arg(totalExp).arg(gainedExp).arg(needKills); emit expChangedStr (tempStr); tempStr = QString("Exp: %1 (%2)(%3) left %4").arg(totalExp).arg(gainedExp).arg(needKills).arg(leftExp); emit msgReceived(tempStr); if (m_freshKill) { emit expGained( m_lastSpawnPlayerKilled.name, m_lastSpawnPlayerKilled.level, exp->exp - m_currentExp, m_longZoneName); // have gained experience for the kill, it's no longer fresh m_freshKill = false; } else if ((m_lastSpellOnId == 0x0184) || // Resuscitate (m_lastSpellOnId == 0x0187) || // Revive (does it or don't it?) (m_lastSpellOnId == 0x0188) || // Resurrection (m_lastSpellOnId == 0x02f4) || // Resurrection Effects (m_lastSpellOnId == 0x02f5) || // Resurrection Effect (m_lastSpellOnId == 0x03e2) || // Customer Service Resurrection (m_lastSpellOnId == 0x05f4)) // Reviviscence { emit expGained( spell_name(m_lastSpellOnId), 0, // level of caster would only confuse things further exp->exp - m_currentExp, m_longZoneName); } else emit expGained( "Unknown", // Randomly blessed with xp? 0, // don't know what gave it so, level 0 exp->exp - m_currentExp, m_longZoneName ); emit stsMessage(tempStr); } emit expChangedInt ( exp->exp, calc_exp( getPlayerLevel () - 1, getPlayerRace (), getPlayerClass () ), calc_exp( getPlayerLevel (), getPlayerRace (), getPlayerClass () ) ); m_currentExp = exp->exp; m_validExp = true; }
void EQPlayer::backfill(const playerProfileStruct* player) { QString messag; printf("EQPlayer::backfill():\n"); messag.sprintf("Zone: Name='%s' Last='%s'\n", player->name, player->lastName); emit msgReceived(messag); messag.sprintf("Zone: Level: %d\n", player->level); emit msgReceived(messag); messag.sprintf("Zone: PlayerMoney: P=%d G=%d S=%d C=%d\n", player->platinum, player->gold, player->silver, player->copper); emit msgReceived(messag); messag.sprintf("Zone: BankMoney: P=%d G=%d S=%d C=%d\n", player->platinumBank, player->goldBank, player->silverBank, player->copperBank); emit msgReceived(messag); memcpy(&m_thePlayer, player, sizeof(playerProfileStruct)); m_playerLevel = player->level; m_playerRace = player->race; m_playerClass = player->class_; setUseDefaults(false); setPlayerName(player->name); setPlayerLastName(player->lastName); setPlayerLevel(player->level); setPlayerRace(player->race); setPlayerClass(player->class_); messag = "Exp: " + Commanate(player->exp); // Due to the delayed decode, we must reset // maxplayer on zone and accumulate all totals. m_maxSTR += player->STR; m_maxSTA += player->STA; m_maxCHA += player->CHA; m_maxDEX += player->DEX; m_maxINT += player->INT; m_maxAGI += player->AGI; m_maxWIS += player->WIS; emit statChanged (LIST_STR, m_maxSTR, m_maxSTR); emit statChanged (LIST_STA, m_maxSTA, m_maxSTA); emit statChanged (LIST_CHA, m_maxCHA, m_maxCHA); emit statChanged (LIST_DEX, m_maxDEX, m_maxDEX); emit statChanged (LIST_INT, m_maxINT, m_maxINT); emit statChanged (LIST_AGI, m_maxAGI, m_maxAGI); emit statChanged (LIST_WIS, m_maxWIS, m_maxWIS); m_maxMana = calcMaxMana( m_maxINT, m_maxWIS, m_playerClass, m_playerLevel ) + m_plusMana; emit manaChanged(m_thePlayer.MANA, m_maxMana); // need max mana uint32_t playerExp = player->exp; if (playerExp > m_currentExp) m_currentExp = playerExp; else playerExp = m_currentExp; m_maxExp = calc_exp(m_playerLevel,m_playerRace,m_playerClass); emit expChangedStr (messag); emit expChangedInt ( playerExp, calc_exp(m_playerLevel-1, m_playerRace, m_playerClass), calc_exp(m_playerLevel, m_playerRace, m_playerClass) ); // Merge in our new skills... for (int a = 0; a < MAX_KNOWN_SKILLS; a++) { if ((m_playerSkills[a] == 255) || // not valid (player->skills[a] > m_playerSkills[a])) // or a higher value m_playerSkills[a] = player->skills[a]; emit addSkill (a, m_playerSkills[a]); } // Merge in our new languages... for (int a = 0; a < MAX_KNOWN_LANGS; a++) { if ((m_playerLanguages[a] == 255) || (player->languages[a] > m_playerLanguages[a])) m_playerLanguages[a] = player->languages[a]; emit addLanguage (a, m_playerLanguages[a]); } m_validAttributes = true; m_validMana = true; m_validExp = true; // update the con table fillConTable(); }
int main(int argc,char **argv){ unsigned int calc_mod = 0; double idata = 0; double kdata = 0; double result = 0; if(argc <2){ printf("enter cmd numbers must >= 2!!\n"); return -1; } if(2 == argc){ argv++; calc_mod = atoi(*argv); switch(calc_mod){ case 5: printf("Calc PI is %f\n",calc_pi()); break; case 14: result = calc_rand(); printf("Calc rand result is %f\n", result); break; default: printf("Input abnormally\n"); break; } } if(3 == argc){ argv++; calc_mod = atoi(*argv); argv++; idata = atof(*argv); switch(calc_mod){ case 6: result = calc_sin((double) idata); printf("Calc sin (%f) result is %f\n",idata,result); break; case 7: result= calc_cos((double) idata); printf("Calc cos (%f) result is %f\n",idata,result); break; case 8: if(PI/2 == idata ||-PI/2 == idata){ printf("Input abnormally\n"); break; } result = calc_tan((double) idata); printf("Calc tan (%f) result is %f\n",idata,result); break; case 9: result = calc_fabs((double) idata); printf("Calc tan (%f) result is %f\n",idata,result); break; case 10: result = calc_exp((double) idata); printf("Calc exp (%f) result is %f\n",idata,result); break; case 11: if(idata <= 0){ printf("Input abnormally\n"); break; } result = calc_ln((double) idata); printf("Calc ln (%f) result is %f\n",idata,result); break; case 12: if(idata <= 0){ printf("Input abnormally\n"); break; } result = calc_log10((double) idata); printf("Calc log10 (%f) result is %f\n",idata,result); break; default: printf("Input abnormally\n"); break; } } if(4 == argc){ argv++; calc_mod = atoi(*argv); argv++; idata = atof(*argv); argv++; kdata = atof(*argv); switch(calc_mod){ case 1: result = calc_add(idata, kdata); printf("Calc add (%f + %f) result is %f\n", idata, kdata, result); break; case 2: result = calc_sub(idata, kdata); printf("Calc sub (%f - %f) result is %f\n", idata, kdata, result); break; case 3: result = calc_mul(idata,kdata); printf("Calc mul (%f * %f) result is %f\n", idata, kdata, result); break; case 4: if(0 == kdata){ printf("Input abnormaly\n"); break; } result = calc_div(idata,kdata); printf("Calc div (%f / %f) result is %f\n", idata, kdata, result); case 13: result = calc_pow(idata,kdata); printf("Calc pow (%f / %f) result is %f\n", idata, kdata, result); break; default: printf("Input abnormally\n"); break; } } return 0; }
void warped_raise(int cn,int base) { int n,in,val; for (n=0; n<V_MAX; n++) { if (!skill[n].cost) continue; if (!ch[cn].value[1][n]) continue; switch(n) { case V_HP: val=max(10,base-(base/4)); break; case V_ENDURANCE: val=max(10,base-(base/4)); break; case V_WIS: val=max(10,base-(base/5)); break; case V_INT: val=max(10,base-(base/10)); break; case V_AGI: val=max(10,base-(base/10)); break; case V_STR: val=max(10,base-(base/10)); break; case V_HAND: val=max(1,base); break; case V_ARMORSKILL: val=max(1,(base/10)*10); break; case V_ATTACK: val=max(1,base); break; case V_PARRY: val=max(1,base); break; case V_IMMUNITY: val=max(1,base); break; case V_TACTICS: val=max(1,base-5); break; case V_WARCRY: val=max(1,base); break; case V_SURROUND: val=max(1,base-20); break; case V_BODYCONTROL: val=max(1,base-20); break; case V_SPEEDSKILL: val=max(1,base-10); break; case V_PERCEPT: val=max(1,base-10); break; case V_RAGE: val=max(1,base-5); break; case V_PROFESSION: val=min(60,max(1,base-5)); break; default: val=max(1,base-40); break; } val=min(val,120); ch[cn].value[1][n]=val; } ch[cn].exp=ch[cn].exp_used=calc_exp(cn); ch[cn].level=exp2level(ch[cn].exp); ch[cn].prof[P_LIGHT]=min(30,ch[cn].value[1][V_PROFESSION]); ch[cn].prof[P_DARK]=min(30,ch[cn].value[1][V_PROFESSION]); if (ch[cn].value[1][V_PROFESSION]>30) { ch[cn].prof[P_ATHLETE]=min(30,ch[cn].value[1][V_PROFESSION]-30); } // create special equipment bonus to equal that of the average player in=create_item("equip1"); for (n=0; n<5; n++) it[in].mod_value[n]=1+base/2.75; ch[cn].item[12]=in; it[in].carried=cn; in=create_item("equip2"); for (n=0; n<4; n++) it[in].mod_value[n]=1+base/2.75; ch[cn].item[13]=in; it[in].carried=cn; in=create_item("equip3"); for (n=0; n<5; n++) it[in].mod_value[n]=1+base/2.75; ch[cn].item[14]=in; it[in].carried=cn; in=create_item("armor_spell"); ch[cn].item[15]=in; it[in].carried=cn; it[in].mod_value[0]=max(13,min(123,ch[cn].value[1][V_ARMORSKILL]+10))*20; in=create_item("weapon_spell"); ch[cn].item[16]=in; it[in].carried=cn; it[in].mod_value[0]=max(13,min(123,ch[cn].value[1][V_HAND]+10)); }