static void recv_stop (Event_Type et, Object *obj, Any_Type reg_arg, Any_Type call_arg) { Call *c = (Call *) obj; int index; Time xfer_time; assert (et == EV_CALL_RECV_STOP && object_is_call (c)); assert (c->basic.time_recv_start > 0); xfer_time = timer_now () - c->basic.time_recv_start; updatestats(&es_transfer, xfer_time); basic.hdr_bytes_received += c->reply.header_bytes; basic.reply_bytes_received += c->reply.content_bytes; basic.footer_bytes_received += c->reply.footer_bytes; index = (c->reply.status / 100); assert ((unsigned) index < NELEMS (basic.num_replies)); ++basic.num_replies[index]; ++num_replies; ++c->conn->basic.num_calls_completed; }
void pkmviewer::on_sbSpeedEV_valueChanged(int arg1) { if(redisplayok) { temppkm->evs.speed = arg1; updatestats(); } }
void pkmviewer::on_sbDefEV_valueChanged(int arg1) { if(redisplayok) { temppkm->evs.defense = arg1; updatestats(); } }
void pkmviewer::on_sbAtkEV_valueChanged(int arg1) { if(redisplayok) { temppkm->evs.attack = arg1; updatestats(); } }
void pkmviewer::on_sbSpDefIV_valueChanged(int arg1) { if(redisplayok) { temppkm->ivs.spdef = arg1; updatestats(); } }
void pkmviewer::on_sbHPIV_valueChanged(int arg1) { if(redisplayok) { temppkm->ivs.hp = arg1; updatestats(); } }
void pkmviewer::on_cbNatures_currentIndexChanged(int index) { if(redisplayok) { temppkm->nature = (Natures::natures)index; updatestats(); updatestatcolors(); } }
void printsize(int size, int csize) { char s[17]; // As a side effect update the size stats updatestats(size, csize); snprintf(s, 17, "%7d(%d)", size, csize); printf("%-16s ", s); }
static void conn_connected (Event_Type et, Object *obj, Any_Type reg_arg, Any_Type call_arg) { Conn *s = (Conn *) obj; assert (et == EV_CONN_CONNECTED && object_is_conn (s)); updatestats (&es_connect, (timer_now () - s->basic.time_connect_start)); }
static void conn_destroyed (Event_Type et, Object *obj, Any_Type reg_arg, Any_Type c_arg) { Conn *s = (Conn *) obj; assert (et == EV_CONN_DESTROYED && object_is_conn (s) && num_active_conns > 0); if (s->basic.num_calls_completed > 0) updatestats(&es_lifetime, timer_now () - s->basic.time_connect_start); --num_active_conns; }
static void recv_start (Event_Type et, Object *obj, Any_Type reg_arg, Any_Type call_arg) { Call *c = (Call *) obj; Time now; assert (et == EV_CALL_RECV_START && object_is_call (c)); now = timer_now (); updatestats(&es_response, now - c->basic.time_send_start); c->basic.time_recv_start = now; }
void cCombat::ItemCastSpell(UOXSOCKET s, P_CHAR pc, P_ITEM pi)//S=Socket c=Char # Target i=Item //Itemid { if(!pi) return; P_CHAR pc_currchar = currchar[s]; unsigned short int spellnum=((pi->morex*8)-8)+pi->morey; unsigned short int tempmana=pc_currchar->mn;//Save their mana so we can give it back. unsigned short int tempmage=pc_currchar->skill[MAGERY];//Easier than writing new functions for all these spells if(pi->type!=15) return; if(pi->morez<=0) return; switch(spellnum) { case 1: Magic->ClumsySpell(pc_currchar,pc); break; //LB case 3: Magic->FeebleMindSpell(pc_currchar,pc); break; //LB case 5: Magic->MagicArrow(pc_currchar,pc); break; // lB case 8: Magic->WeakenSpell(pc_currchar,pc); break; //LB case 18: Magic->FireballSpell(pc_currchar,pc); break; //LB case 22: Magic->HarmSpell(pc_currchar,pc); break; //LB case 27: Magic->CurseSpell(pc_currchar,pc); break; //LB case 30: Magic->LightningSpell(pc_currchar,pc); break; //lb case 37: Magic->MindBlastSpell(pc_currchar,pc); break; case 38: Magic->ParalyzeSpell(pc_currchar,pc); break; //lb case 42: Magic->EnergyBoltSpell(pc_currchar,pc); break; case 43: Magic->ExplosionSpell(pc_currchar,pc); break; case 51: Magic->FlameStrikeSpell(pc_currchar,pc); break; default: staticeffect(pc_currchar, 0x37, 0x35, 0, 30); soundeffect2(pc_currchar, 0x005C); break; } pc_currchar->mn+=tempmana; pc_currchar->skill[MAGERY]=tempmage; if(pc_currchar->in<pc_currchar->mn) pc_currchar->mn=pc_currchar->in;//Shouldn't happen, but just in case; updatestats(pc_currchar, 1); pi->morez--; if(pi->morez==0)//JUST lost it's charge.... sysmessage(s, tr("This item is out of charges.")); }
void cCombat::DoCombat(P_CHAR pc_attacker, unsigned int currenttime) { int x, bowtype=0;// spamanachecking, tmp; if ( pc_attacker == NULL ) return; if (pc_attacker->free) return; P_ITEM pWeapon=pc_attacker->getWeapon(); P_CHAR pc_defender = FindCharBySerial(pc_attacker->targ); /*if (pc_attacker->priv2&2) //The char is paralyzed { sysmessage(calcSocketFromChar(pc_attacker), "You are frozen and cannot attack."); return; }*/ if ((pc_defender == NULL) || (pc_defender->isPlayer() && !online(pc_defender) || pc_defender->isHidden()) && pc_attacker->war) { pc_attacker->war=false; // LB pc_attacker->timeout=0; pc_attacker->attacker = INVALID_SERIAL; pc_attacker->resetAttackFirst(); return; } if (( pc_attacker->isNpc() || online(pc_attacker) ) && pc_defender != NULL ) { if (pc_defender == NULL) return; if (pc_defender->free) return; if (pc_attacker->dispz > (pc_defender->dispz +10)) return;//FRAZAI if (pc_attacker->dispz < (pc_defender->dispz -10)) return;//FRAZAI if ((pc_defender->isNpc() && pc_defender->npcaitype!=17) || (online(pc_defender) && !pc_defender->dead) ) // ripper { if (chardist( pc_attacker, pc_defender ) > SrvParams->attack_distance()) { if (pc_attacker->npcaitype==4 && pc_attacker->inGuardedArea()) // changed from 0x40 to 4, LB { pc_attacker->moveTo(pc_defender->pos); teleport(pc_attacker); soundeffect2(pc_attacker, 0x01FE); // crashfix, LB staticeffect(pc_attacker, 0x37, 0x2A, 0x09, 0x06); npctalkall(pc_attacker,"Halt, scoundrel!",1); } else { // else -> npcaityes != 4 pc_attacker->targ = INVALID_SERIAL; pc_attacker->timeout=0; P_CHAR pc = FindCharBySerial(pc_attacker->attacker); if (pc != NULL) { pc->resetAttackFirst(); pc->attacker = INVALID_SERIAL; // lb crashfix } pc_attacker->attacker=INVALID_SERIAL; pc_attacker->resetAttackFirst(); if (pc_attacker->isNpc() && pc_attacker->npcaitype!=17 && !pc_attacker->dead && pc_attacker->war) npcToggleCombat(pc_attacker); // ripper } } else { if (pc_attacker->targ == INVALID_SERIAL) { npcsimpleattacktarget(pc_attacker, pc_defender); x=(((100-pc_attacker->effDex())*MY_CLOCKS_PER_SEC)/25)+(1*MY_CLOCKS_PER_SEC); //Yet another attempt. pc_attacker->timeout=currenttime+x; return; } if (Combat->TimerOk(pc_attacker)) { int los = line_of_sight(-1, pc_attacker->pos, pc_defender->pos, WALLS_CHIMNEYS+DOORS+FLOORS_FLAT_ROOFING); UOXSOCKET s1 = calcSocketFromChar(pc_attacker); int fightskill=Skills->GetCombatSkill(pc_attacker); x=0; if (fightskill==ARCHERY) { if (los) { int arrowsquant; bowtype=Combat->GetBowType(pc_attacker); if (bowtype==1) arrowsquant=getamount(pc_attacker, 0x0F3F); else arrowsquant=getamount(pc_attacker, 0x1BFB); if (arrowsquant>0) x=1; //else // sysmessage(s1, "You are out of ammunitions!"); //-Fraz- this message can cause problems removed } } if ( chardist( pc_attacker, pc_defender )<2 && fightskill!=ARCHERY ) x=1; if (x) { // - Do stamina maths - AntiChrist (6) - if(abs(SrvParams->attackstamina())>0 && !pc_attacker->isGM()) { if((SrvParams->attackstamina()<0)&&(pc_attacker->stm<abs(SrvParams->attackstamina()))) { sysmessage(s1, tr("You are too tired to attack.")); SetWeaponTimeout(pc_attacker, pWeapon); return; } pc_attacker->stm += SrvParams->attackstamina(); if (pc_attacker->stm>pc_attacker->effDex()) pc_attacker->stm=pc_attacker->effDex(); if (pc_attacker->stm<0) pc_attacker->stm=0; updatestats((pc_attacker),2); //LB, crashfix, was currchar[a] // --------ATTACK STAMINA END ------ } DoCombatAnimations( pc_attacker, pc_defender, fightskill, bowtype, los); if (((chardist( pc_attacker, pc_defender )<2)||(fightskill==ARCHERY))&&!(pc_attacker->npcaitype==4)) // changed from 0x40 to 4 { if (los) { npcsimpleattacktarget(pc_attacker, pc_defender); } } if (pc_attacker->timeout2 > uiCurrentTime) return; //check shotclock memory-BackStab if (fightskill==ARCHERY) Combat->CombatHit(pc_attacker, pc_defender, currenttime,los); else pc_attacker->swingtarg = pc_defender->serial; } SetWeaponTimeout(pc_attacker, pWeapon); pc_attacker->timeout2=pc_attacker->timeout; // set shotclock memory-BackStab if (!pc_defender->isInvul()) { NpcSpellAttack(pc_attacker,pc_defender,currenttime,los); } if (fightskill!=ARCHERY) { Combat->CombatHit(pc_attacker, pc_defender, currenttime, los); // LB !!! //return; // Ripper ???? (Duke) } } } if (pc_defender->hp<1)//Highlight //Repsys { if((pc_attacker->npcaitype==4 || pc_attacker->npcaitype==9) && pc_defender->isNpc()) { npcaction(pc_defender, 0x15); PlayDeathSound(pc_defender); Npcs->DeleteChar(pc_defender);//Guards, don't give body } else { deathstuff(pc_defender); } //murder count \/ if ((pc_attacker->isPlayer())&&(pc_defender->isPlayer()))//Player vs Player { if(pc_defender->isInnocent() && GuildCompare(pc_attacker, pc_defender )==0 ) { ++pc_attacker->kills; UOXSOCKET attacker_socket = calcSocketFromChar(pc_attacker); sysmessage(attacker_socket, tr("You have killed %1 innocent people.").arg(pc_attacker->kills)); //clConsole.send("DEBUG %s's kills are now -> %i\n",pc_attacker->name,pc_attacker->kills); if (pc_attacker->kills==SrvParams->maxkills()+1) sysmessage(attacker_socket, tr("You are now a murderer!")); } if (SrvParams->pvpLog()) { sprintf((char*)temp,"%s was killed by %s!\n",pc_defender->name.c_str(), pc_attacker->name.c_str()); savelog((char*)temp,"PvP.log"); } } npcToggleCombat(pc_attacker); return; // LB } } } }
/* * Modified : 01.16.2002 Author : Dark0n3 * * Description : Marks file as deleted. * * Obsolete? */ short int clear_file(const char *path, char *f) { int n = 0, count = 0, retval = -1; FILE *file; RACEDATA rd; if ((file = fopen(path, "r+"))) { while (fread(&rd, sizeof(RACEDATA), 1, file)) { #if (sfv_cleanup_lowercase) if (sizeof(rd.fname) && strncasecmp(rd.fname, f, NAME_MAX) == 0) { #else if (sizeof(rd.fname) && strncmp(rd.fname, f, NAME_MAX) == 0) { #endif rd.status = F_DELETED; fseek(file, sizeof(RACEDATA) * count, SEEK_SET); if ((retval = fwrite(&rd, sizeof(RACEDATA), 1, file)) != 1) d_log("clear_file: write failed (%d != %d): %s\n", sizeof(RACEDATA), retval, strerror(errno)); n++; } count++; } fclose(file); } return n; } /* * Modified : 02.19.2002 Author : Dark0n3 * * Description : Reads current race statistics from fixed format file. * : "path" is the location of a racedata file. */ void readrace(const char *path, struct VARS *raceI, struct USERINFO **userI, struct GROUPINFO **groupI) { int fd, rlength = 0; RACEDATA rd; if ((fd = open(path, O_RDONLY)) != -1) { if (!update_lock(raceI, 1, 0)) { d_log("readrace: Lock is suggested removed. Will comply and exit\n"); remove_lock(raceI); exit(EXIT_FAILURE); } while ((rlength = read(fd, &rd, sizeof(RACEDATA)))) { if (rlength != sizeof(RACEDATA)) { d_log("readrace: Agh! racedata seems to be broken!\n"); remove_lock(raceI); exit(EXIT_FAILURE); } switch (rd.status) { case F_NOTCHECKED: case F_CHECKED: updatestats(raceI, userI, groupI, rd.uname, rd.group, rd.size, (unsigned long)rd.speed, rd.start_time); break; case F_BAD: raceI->total.files_bad++; raceI->total.bad_size += rd.size; break; case F_NFO: raceI->total.nfo_present = 1; break; } } close(fd); } }
void cTmpEff::Expire() { int k; P_CHAR pc_s = FindCharBySerial(getDest()); if ( num != 9 // grinding && num != 10 // create potion && num != 13 // door close && num != 14 // training dummy && num != 17) // explosion { //Added by TANiS to fix errors, memory corruption and door auto-close 10-6-98 // Check to see if it's a dead char and delete the wrong effect, or if it's just // a door auto-close effect and process it the right way. if ( pc_s == NULL ) { return; // just remove this effect } //End of TANiS' change } switch(num) { case 1: if (pc_s->priv2&0x02) { pc_s->priv2 &= 0xFD; int sk=calcSocketFromChar((pc_s)); if (sk!=-1) sysmessage(sk, "You are no longer frozen."); Magic->afterParticles(38, pc_s); } break; case 2: pc_s->fixedlight='\xFF'; dolight(calcSocketFromChar((pc_s)), worldbrightlevel); break; case 3: pc_s->chgDex(more1); statwindow(calcSocketFromChar(pc_s), pc_s); break; case 4: pc_s->in+=more1; statwindow(calcSocketFromChar(pc_s), pc_s); break; case 5: pc_s->st+=more1; statwindow(calcSocketFromChar(pc_s), pc_s); break; case 6: pc_s->chgDex(-1 * more1); pc_s->stm=min(pc_s->stm, (int)pc_s->effDex()); statwindow(calcSocketFromChar(pc_s), pc_s); break; case 7: pc_s->in-=more1; pc_s->mn=min(pc_s->mn, pc_s->in); statwindow(calcSocketFromChar(pc_s), pc_s); break; case 8: pc_s->st-=more1; pc_s->hp=min(pc_s->hp, pc_s->st); statwindow(calcSocketFromChar(pc_s), pc_s); break; case 9: if (more1 == 0) { if (more2!=0) { sprintf((char*)temp, "*%s continues grinding.*", pc_s->name.c_str()); npcemoteall(pc_s, (char*)temp,1); } soundeffect2(pc_s, 0x0242); } break; case 10: { pc_s = FindCharBySerial(getSour()); P_ITEM pMortar = FindItemBySerial(getDest()); if(pMortar != NULL) //AntiChrist - to prevent crashes Skills->CreatePotion(pc_s, more1, more2, pMortar); } break; case 11: pc_s->st-=more1; pc_s->hp=min(pc_s->hp, pc_s->st); pc_s->chgDex(-1 * more2); pc_s->stm=min(pc_s->stm, (int)pc_s->effDex()); pc_s->in-=more3; pc_s->mn=min(pc_s->mn, pc_s->in); statwindow(calcSocketFromChar(pc_s), pc_s); break; case 12: pc_s->st+=more1; pc_s->chgDex(more2); pc_s->in+=more3; statwindow(calcSocketFromChar(pc_s), pc_s); break; case 13: { P_ITEM pDoor = FindItemBySerial(getDest());// door if (pDoor) { if (pDoor->dooropen==0) break; pDoor->dooropen=0; dooruse(calcSocketFromChar((pc_s)), pDoor); } break; } case 14: //- training dummies Tauriel check to see if item moved or not before searching for it { P_ITEM pTrainDummy = FindItemBySerial(getDest()); if (pTrainDummy) { if (pTrainDummy->id()==0x1071) { pTrainDummy->setId(0x1070); pTrainDummy->gatetime=0; RefreshItem(pTrainDummy);//AntiChrist } else if (pTrainDummy->id()==0x1075) { pTrainDummy->setId(0x1074); pTrainDummy->gatetime=0; RefreshItem(pTrainDummy);//AntiChrist } } } break; case 15: //reactive armor pc_s->ra=0; break; case 16: //Explosion potion messages Tauriel sprintf((char*)temp, "%i", more3); sysmessage(calcSocketFromChar((pc_s)), (char*)temp); // crashfix, LB break; case 17: //Explosion potion explosion Tauriel pc_s = FindCharBySerial(getSour()); explodeitem(calcSocketFromChar((pc_s)), FindItemBySerial(getDest())); //explode this item break; case 18: //Polymorph spell by AntiChrist 9/99 if(pc_s->polymorph)//let's ensure it's under polymorph effect! { pc_s->setId(pc_s->xid); pc_s->polymorph=false; teleport(pc_s); } break; case 19: //Incognito spell by AntiChrist 12/99 reverseIncognito(pc_s); break; case 20: // LSD potions, LB 5'th nov 1999 { k=calcSocketFromChar((pc_s)); if (k==-1) return; LSD[k]=0; sysmessage(k,"LSD has worn off"); pc_s->stm=3; // stamina near 0 pc_s->mn=3; pc_s->hp=pc_s->hp/7; impowncreate(k, pc_s, 0); all_items(k); // absolutely necassairy here !!! AllCharsIterator it; for (it.Begin(); !it.atEnd(); it++) // that hurts, but there's no other good way { P_CHAR pc = it.GetData(); if (chardist( pc_s, pc ) < 15 && ( online(pc) || pc->isNpc() ) ) updatechar(pc); } } break; case 21: int toDrop; toDrop = more1; //Effect->more1; if( ( pc_s->baseskill[PARRYING] - toDrop ) < 0 ) pc_s->baseskill[PARRYING] = 0; else pc_s->baseskill[PARRYING] -= toDrop; break; case 33: // delayed hiding for gms after flamestrike effect k=calcSocketFromChar((pc_s)); sysmessage(k,"You have hidden yourself well."); pc_s->hidden=1; updatechar(pc_s); break; case 34: // delayed unhide for gms // Changed to be uniform with delayed hideing (Aldur) k = calcSocketFromChar((pc_s)); sysmessage(k, "You are now visible."); pc_s->hidden = 0; updatechar(pc_s); break; case 35: //heals some pf - solarin int iHp; iHp=(int)more1; pc_s->hp+=iHp; updatestats(pc_s, 0); if (!more2) tempeffect(pc_s, pc_s, 35, more1+1, 1, more3, 0); break; default: LogErrorVar("Fallout of switch (num = %i).", num); break; } Items->CheckEquipment(pc_s); //AntiChrist - checks equipments for stats requirements }
void pkmviewer::displayPKM() { redisplayok = false; int index = 0; this->setWindowTitle(QString::fromStdWString(getpkmnickname(temppkm))); switch(temppkm->metlevel_otgender.otgender) { case Genders::male: ui->rbOTMale->setChecked(true); break; case Genders::female: ui->rbOTFemale->setChecked(true); break; default: ui->rbOTMale->setChecked(true); break; } ui->sbTID->setValue(temppkm->tid); ui->sbSID->setValue(temppkm->sid); ui->cbPKMSpecies->setCurrentIndex((int)(temppkm->species)-1); ui->sbSpecies->setValue(temppkm->species); // ui->cbPKMItem->setCurrentIndex((int)temppkm->item); index = ui->cbPKMItem->findData((int)temppkm->item); if ( index != -1 ) { // -1 for not found ui->cbPKMItem->setCurrentIndex(index); } ui->sbLevel->setValue(getpkmlevel(temppkm)); ui->sbEXP->setMaximum(getpkmexpatlevel(temppkm->species,100)); ui->sbEXP->setValue(temppkm->exp); int tnl = getpkmexptonext(temppkm); if(tnl == 0) { ui->pbTNL->setMinimum(0); ui->pbTNL->setMaximum(1); ui->pbTNL->setValue(0); ui->pbTNL->setTextVisible(false); } else { ui->pbTNL->setMinimum(getpkmexpatcur(temppkm)); ui->pbTNL->setMaximum(tnl + temppkm->exp); ui->pbTNL->setValue(temppkm->exp); ui->pbTNL->setTextVisible(true); } ui->lblTNL->setText(QString::number(getpkmexptonext(temppkm))); ui->txtNickname->setText(QString::fromStdWString(getpkmnickname(temppkm))); QColor otcolor = Qt::blue; if(temppkm->metlevel_otgender.otgender == Genders::female) { otcolor = Qt::red; } QPalette OTpalette = ui->txtOTName->palette(); OTpalette.setColor(ui->txtOTName->foregroundRole(), otcolor); ui->txtOTName->setPalette(OTpalette); ui->txtOTName->setText(QString::fromStdWString(getpkmotname(temppkm))); ui->cbNicknamed->setChecked(temppkm->ivs.isnicknamed); QPixmap * itempix = new QPixmap(); QGraphicsScene * itemscene = new QGraphicsScene(); *itempix = getitemimage(temppkm->item); itemscene->addPixmap(*itempix); ui->pbHeldItem->setScene(itemscene); QPixmap * type1pix = new QPixmap(); QGraphicsScene * type1scene = new QGraphicsScene(); *type1pix = gettypepic(lookuppkmtype(temppkm,1)); type1scene->addPixmap(*type1pix); ui->pbType1->setScene(type1scene); int pkmtype2 = 0; pkmtype2 = lookuppkmtype(temppkm,2); QPixmap * type2pix = new QPixmap(); QGraphicsScene * type2scene = new QGraphicsScene(); if(pkmtype2 != -1) { *type2pix = gettypepic(lookuppkmtype(temppkm,2)); } type2scene->addPixmap(*type2pix); ui->pbType2->setScene(type2scene); QPixmap * shinypix = new QPixmap(); QGraphicsScene * shinyscene = new QGraphicsScene(); if(getpkmshiny(temppkm)) { *shinypix = getshinystar(); } shinyscene->addPixmap(*shinypix); ui->pbShiny->setScene(shinyscene); QPixmap * spritepixmap = new QPixmap(); QGraphicsScene * spritescene = new QGraphicsScene(); *spritepixmap = getpkmsprite(temppkm); spritescene->addPixmap(*spritepixmap); ui->pbSprite->setScene(spritescene); ui->cbBall->setCurrentIndex(((int)temppkm->ball)-1); ui->sbHPIV->setValue(temppkm->ivs.hp); ui->sbAtkIV->setValue(temppkm->ivs.attack); ui->sbDefIV->setValue(temppkm->ivs.defense); ui->sbSpAtkIV->setValue(temppkm->ivs.spatk); ui->sbSpDefIV->setValue(temppkm->ivs.spdef); ui->sbSpeedIV->setValue(temppkm->ivs.speed); ui->sbHPEV->setValue(temppkm->evs.hp); ui->sbAtkEV->setValue(temppkm->evs.attack); ui->sbDefEV->setValue(temppkm->evs.defense); ui->sbSpAtkEV->setValue(temppkm->evs.spatk); ui->sbSpDefEV->setValue(temppkm->evs.spdef); ui->sbSpeedEV->setValue(temppkm->evs.speed); ui->cbNatures->setCurrentIndex(temppkm->nature); ui->cbMove1->setCurrentIndex(((int)temppkm->moves[0])-1); ui->cbMove2->setCurrentIndex((int)temppkm->moves[1]); ui->cbMove3->setCurrentIndex((int)temppkm->moves[2]); ui->cbMove4->setCurrentIndex((int)temppkm->moves[3]); ui->cbPKMAbility->setCurrentIndex(((int)temppkm->ability)-1); ui->sbPKRSDays->setValue(temppkm->pkrs.days); ui->sbPKRSStrain->setValue(temppkm->pkrs.strain); QSpinBox * movePPboxes[4] = {ui->sbMove1PP,ui->sbMove2PP,ui->sbMove3PP,ui->sbMove4PP}; QSpinBox * movePPUpboxes[4] = {ui->sbMove1PPUps,ui->sbMove2PPUps,ui->sbMove3PPUps,ui->sbMove4PPUps}; for(int movenum = 0; movenum < 4; movenum++) { movePPboxes[movenum]->setValue(temppkm->pp[movenum]); movePPUpboxes[movenum]->setValue(temppkm->ppup[movenum]); } int base = 10; if(ui->chkHex->isChecked()) { base = 16; } ui->txtPID->setText(QString::number(temppkm->pid,base).toUpper()); ui->chkNsPKM->setChecked(temppkm->dwability.n_pkm); ui->chkFateful->setChecked(temppkm->forms.fencounter); ui->sbMetLevel->setValue((int)temppkm->metlevel_otgender.metlevel); ui->chkMetAsEgg->setChecked(pkmmetasegg(temppkm)); ui->cbEggLocation->setEnabled(ui->chkMetAsEgg->isChecked()); ui->dtEggDate->setEnabled(ui->chkMetAsEgg->isChecked()); index = ui->cbHometown->findData((int)temppkm->hometown); if ( index != -1 ) { // -1 for not found ui->cbHometown->setCurrentIndex(index); } index = ui->cbCountry->findData((int)temppkm->country); if ( index != -1 ) { // -1 for not found ui->cbCountry->setCurrentIndex(index); } index = ui->cbMetLocation->findData((int)temppkm->met); if ( index != -1 ) { // -1 for not found ui->cbMetLocation->setCurrentIndex(index); } index = ui->cbEggLocation->findData((int)temppkm->eggmet); if ( index != -1 ) { // -1 for not found ui->cbEggLocation->setCurrentIndex(index); } ui->dtEggDate->setDate(QDate(((int)temppkm->eggdate.year)+2000,(int)temppkm->eggdate.month,(int)temppkm->eggdate.day)); ui->dtMetDate->setDate(QDate(((int)temppkm->metdate.year)+2000,(int)temppkm->metdate.month,(int)temppkm->metdate.day)); ui->cbForm->clear(); switch(temppkm->species) { case Species::castform: ui->cbForm->addItem(""); break; case Species::rotom: ui->cbForm->addItem(""); break; case Species::kyurem: ui->cbForm->addItem(""); break; case Species::genesect: ui->cbForm->addItem(""); break; default: break; } for(int formid = 0; formid < 28; formid++) { std::string formname = getpkmformname((int)temppkm->species,formid); if(formname != "") { ui->cbForm->addItem(QString::fromStdString(formname)); } } ui->cbForm->setEnabled(ui->cbForm->count() > 0); ui->cbForm->setCurrentIndex((int)temppkm->forms.form); redisplayok = true; updatepkrs(); updategenderpic(); updateabilityflavor(); updatemarks(); updatestats(); updatestatcolors(); updatemoveflavor(); updatemovepp(); updatemoveimages(); updatemoveinfo(); updatehidpwr(); }
static void fsst(int, char**) { fprint(2, "%s\n", updatestats(0, 1)); }
// CombatHit now expects that LineOfSight has been checked before (Duke, 10.7.2001) void cCombat::CombatHit(P_CHAR pc_attacker, P_CHAR pc_deffender, unsigned int currenttime, short los) { char hit; if (pc_deffender == NULL || pc_attacker == NULL) return; UOXSOCKET s1=calcSocketFromChar(pc_attacker), s2=calcSocketFromChar(pc_deffender); unsigned short fightskill = Skills->GetCombatSkill(pc_attacker), bowtype = Combat->GetBowType(pc_attacker),splitnum,splitcount,hitin; unsigned int basedamage; int damage; // removed from unsigne by Magius(CHE) signed int x; // Magius(CHE) - For armour absorbtion system int maxabs, maxnohabs, tmpj; P_ITEM pWeapon=pc_attacker->getWeapon();// get the weapon item only once if (pWeapon && !(rand()%50) // a 2 percent chance (Duke, 07.11.2000) && pWeapon->type !=9) // but not for spellbooks (Duke, 09/10/00) { pWeapon->hp--; //Take off a hit point if(pWeapon->hp<=0) { sysmessage(s1, tr("Your weapon has been destroyed")); if ((pWeapon->trigon==1) && (pWeapon->layer>0))// -Frazurbluu- Trigger Type 2 is my new trigger type *- { Trig->triggerwitem(s1, pWeapon, 1); // trigger is fired when item destroyed } Items->DeleItem(pWeapon); } } // End here - Magius(CHE) - For armour absorbtion system pc_attacker->swingtarg=-1; if((chardist(pc_attacker, pc_deffender)>1 && fightskill!=ARCHERY) || !los) return; if(pc_deffender->isNpc() && pc_deffender->isInvul()) return; // ripper hit=Skills->CheckSkill(pc_attacker, fightskill, 0, 1000); // increase fighting skill for attacker and defender if (!hit) { if (pc_attacker->isPlayer()) doMissedSoundEffect(pc_attacker); if ((fightskill==ARCHERY)&&(los)) { if (rand()%3-1)//-1 0 or 1 { short id=0x1BFB; // bolts if (bowtype==1) id=0x0F3F; // arrows P_ITEM pAmmo=Items->SpawnItem(pc_deffender,1,"#",1,id,0,0); if(pAmmo) { pAmmo->moveTo(pc_deffender->pos); pAmmo->priv=1; RefreshItem(pAmmo); } } } } else { if (!pc_deffender->isInvul()) { if (pc_deffender->xid==0x0191) soundeffect2(pc_deffender,0x014b); else if (pc_deffender->xid==0x0190) soundeffect2(pc_deffender,0x0156); playmonstersound(pc_deffender, pc_deffender->id(), SND_DEFEND); //AntiChrist -- for poisoned weapons if((pWeapon) && (pWeapon->poisoned>0)) { pc_deffender->poisoned=pWeapon->poisoned; pc_deffender->poisontime=uiCurrentTime+(MY_CLOCKS_PER_SEC*(40/pc_deffender->poisoned)); // a lev.1 poison takes effect after 40 secs, a deadly pois.(lev.4) takes 40/4 secs - AntiChrist pc_deffender->poisonwearofftime=pc_deffender->poisontime+(MY_CLOCKS_PER_SEC*SrvParams->poisonTimer()); //wear off starts after poison takes effect - AntiChrist } CheckPoisoning(s2, pc_attacker, pc_deffender); // attacker poisons defender CheckPoisoning(s1, pc_deffender, pc_attacker); // and vice versa if ((pc_deffender->effDex()>0)) pc_deffender->priv2&=0xFD; // unfreeze if (fightskill!=WRESTLING && los) Combat->ItemSpell(pc_attacker, pc_deffender); if (fightskill!=WRESTLING || pc_attacker->isNpc()) basedamage=Combat->CalcAtt(pc_attacker); // Calc base damage else { if ((pc_attacker->skill[WRESTLING]/100) > 0) { if (pc_attacker->skill[WRESTLING]/100!=0) basedamage=rand()%(pc_attacker->skill[WRESTLING]/100); else basedamage=0; } else basedamage=rand()%2; } if((pc_attacker->isPlayer()) && (fightskill!=WRESTLING)) { if (pWeapon->racehate != 0 && pc_deffender->race != 0)//-Fraz- Racehating combat { if (pWeapon->racehate==pc_deffender->race) { basedamage *=2; if(pc_deffender->isPlayer()) { sysmessage(s2, tr("You scream in agony from being hit by the accursed metal!")); if (pc_deffender->xid == 0x0191) soundeffect2(pc_deffender,0x0152); else if (pc_deffender->xid==0x0190) soundeffect2(pc_deffender,0x0157); }// can add a possible effect below here for npc's being hit } } } Skills->CheckSkill(pc_attacker, TACTICS, 0, 1000); damage=(int)(basedamage*((pc_attacker->skill[TACTICS]+500.0)/1000.0)); // Add Tactical bonus damage=damage+(int)((basedamage*(pc_attacker->st/500.0))); // Add Strength bonus //Adds a BONUS DAMAGE for ANATOMY //Anatomy=100 -> Bonus +20% Damage - AntiChrist (11/10/99) if (Skills->CheckSkill(pc_attacker, ANATOMY, 0, 1000)) { float multiplier=(((pc_attacker->skill[ANATOMY]*20)/1000.0f)/100.0f)+1; damage=(int) (damage * multiplier); } //Adds a BONUS DEFENCE for TACTICS //Tactics=100 -> Bonus -20% Damage - AntiChrist (11/10/99) float multiplier=1-(((pc_deffender->skill[TACTICS]*20)/1000.0f)/100.0f); damage=(int) (damage * multiplier); P_ITEM pShield=pc_deffender->getShield(); if(pShield) { if (Skills->CheckSkill(pc_deffender, PARRYING, 0, 1000))// chance to block with shield { if (pShield->def!=0) damage-=rand()%(pShield->def);// damage absorbed by shield if(rand()%2) pShield->hp--; //Take off a hit point if(pShield->hp<=0) { sysmessage(s2, tr("Your shield has been destroyed")); if ((pShield->trigon==1) && (pShield->layer >0))// -Frazurbluu- Trigger Type 2 is my new trigger type *- { Trig->triggerwitem(s2, pShield, 1); // trigger is fired when item destroyed } Items->DeleItem(pShield); } } } // Armor destruction and sped up by hitting with maces should go in here somewhere // According to lacation of body hit Id imagine -Frazurbluu- **NEEDS ADDED** x=rand()%100;// determine area of body hit if (!SrvParams->combatHitMessage()) { if (x<=44) x=1; // body else if (x<=58) x=2; // arms else if (x<=72) x=3; // head else if (x<=86) x=4; // legs else if (x<=93) x=5; // neck else x=6; // hands } else { temp[0] = '\0'; hitin = rand()%2; if (x<=44) { x=1; // body switch (hitin) { case 1: //later take into account dir facing attacker during battle if (damage < 10) strcpy(temp, "hits you in your Chest!"); else if (damage >=10) strcpy(temp, "lands a terrible blow to your Chest!"); break; case 2: if (damage < 10) strcpy(temp, "lands a blow to your Stomach!"); else if (damage >=10) strcpy(temp, "knocks the wind out of you!"); break; default: if (damage < 10) strcpy(temp, "hits you in your Ribs!"); else if (damage >=10) strcpy(temp, "broken your Rib?!"); } } else if (x<=58) { if (damage > 1) { x=2; // arms switch (hitin) { case 1: strcpy(temp, "hits you in Left Arm!"); break; case 2: strcpy(temp, "hits you in Right Arm!"); break; default:strcpy(temp, "hits you in Right Arm!"); } } } else if (x<=72) { x=3; // head switch (hitin) { case 1: if (damage < 10) strcpy(temp, "hits you you straight in the Face!"); else if (damage >=10) strcpy(temp, "lands a stunning blow to your Head!"); break; case 2: if (damage < 10) strcpy(temp, "hits you to your Head!"); //kolours - (09/19/98) else if (damage >=10) strcpy(temp, "smashed a blow across your Face!"); break; default: if (damage < 10) strcpy(temp, "hits you you square in the Jaw!"); else if (damage >=10) strcpy(temp, "lands a terrible hit to your Temple!"); } } else if (x<=86) { x=4; // legs switch (hitin) { case 1: strcpy(temp, "hits you in Left Thigh!"); break; case 2: strcpy(temp, "hits you in Right Thigh!"); break; default:strcpy(temp, "hits you in Groin!"); } } else if (x<=93) { x=5; // neck strcpy(temp, "hits you to your Throat!"); } else { x=6; // hands switch (hitin) { case 1: if (damage > 1) strcpy(temp, tr("hits you in Left Hand!").latin1()); break; case 2: if (damage > 1) strcpy(temp, tr("hits you in Right Hand!").latin1()); break; default: if (damage > 1) strcpy(temp, tr("hits you in Right Hand!").latin1()); } } sprintf((char*)temp2,"%s %s",pc_attacker->name.c_str(), temp); if (pc_deffender->isPlayer() && s2!=-1) sysmessage(s2, (char*)temp2); //kolours -- hit display } x = CalcDef(pc_deffender,x); // Magius(CHE) - For armour absorbtion system maxabs = 20; // // there are monsters with DEF >20, this makes them undefeatable maxnohabs=100; if (SrvParams->maxAbsorbtion() > 0) { maxabs = SrvParams->maxAbsorbtion(); } if (SrvParams->maxnohabsorbtion() > 0) { maxnohabs = SrvParams->maxnohabsorbtion(); } if (!ishuman(pc_deffender)) maxabs=maxnohabs; tmpj=(int) (damage*x)/maxabs; // Absorbtion by Magius(CHE) damage -= tmpj; if (damage<0) damage=0; if (pc_deffender->isPlayer()) damage /= SrvParams->npcdamage(); // Rate damage against other players // End Armour Absorbtion by Magius(CHE) (See alse reactive armour spell damage) if (pc_attacker->isPlayer())//Zippy ItemCastSpell(s1, pc_deffender,pWeapon); //AntiChrist - 26/10/99 //when hitten and damage >1, defender fails if casting a spell! if(damage>1 && pc_deffender->isPlayer())//only if damage>1 and against a player { if(pc_deffender->casting && currentSpellType[s2]==0 ) {//if casting a normal spell (scroll: no concentration loosen) Magic->SpellFail(s2); currentSpellType[s2]=0; pc_deffender->spell=-1; pc_deffender->casting=0; pc_deffender->spelltime=0; pc_deffender->priv2 &= 0xfd; // unfreeze, bugfix LB } } if(damage>0) { if (pc_deffender->ra) // For reactive armor spell { // -Frazurbluu- RA may need a rewrite to be more OSI standard here // Its said 80% deflected 10% to attacker / 10% defender gotta check special effects int damage1; damage1=(int)( damage*(pc_deffender->skill[MAGERY]/2000.0)); pc_deffender->hp -= damage-damage1; if (pc_deffender->isNpc()) damage1 = damage1 * SrvParams->npcdamage(); // by Magius(CHE) pc_attacker->hp -= damage1; // Remove damage from attacker staticeffect(pc_deffender, 0x37, 0x4A, 0, 15);//RA effect - AntiChrist (9/99) if ((fightskill==MACEFIGHTING) && (IsSpecialMace(pWeapon->id())))// Stamina Loss -Fraz- { //pc_attacker->stm-=3+(rand()%4); } if ((fightskill==FENCING) && (IsFencing2H(pWeapon->id())))// Paralyzing -Fraz- { //will call the combat caused paralyzation **NEED TO DO** } if ((fightskill==SWORDSMANSHIP) && (IsAxe(pWeapon->id())))// Concussion Hit -Fraz- { //will call the combat caused concussion (loss of int for 30 secs) **NEED TO DO** // for now make it subtract mana //pc_attacker->mn-=(pc_attacker->mn/2); } updatestats(pc_attacker, 0); } else { // -Fraz- Now needs adjusted to happen on a skill percentage pc_deffender->hp-=damage; // Remove damage from defender only apply special hits to non-npc's if ((fightskill==MACEFIGHTING) && (IsSpecialMace(pWeapon->id())) && (pc_deffender->isPlayer()))// Stamina Loss -Fraz- { pc_deffender->stm-=3+(rand()%3); } if ((fightskill==FENCING) && (IsFencing2H(pWeapon->id())) && (pc_deffender->isPlayer()))// Paralyzing -Fraz- { tempeffect(pc_attacker, pc_deffender, 44, 0, 0, 0); sysmessage(s1, tr("You delivered a paralyzing blow")); } if ((fightskill==SWORDSMANSHIP) && (IsAxe(pWeapon->id())) && (pc_deffender->isPlayer()))// Concussion Hit -Fraz- { tempeffect(pc_attacker, pc_deffender, 45, 0, 0, 0); //pc_attacker->mn-=(pc_attacker->mn/2); //-Fraz- temp use of this for concussion } updatestats((pc_deffender), 0); } // blood shred by blackwind if (damage>10) { short id = 0x122c; if (damage>50) id=0x122a; else if (damage>40) id=0x122d; else if (damage>30) id=0x122e; else if (damage>20) id=0x122b; P_ITEM pBlood = Items->SpawnItem(pc_deffender, 1, "#", 0, id, 0, 0); if (pBlood) { pBlood->moveTo(pc_deffender->pos); pBlood->priv = 1; pBlood->setGMMovable(); //Moveable by GM RefreshItem(pBlood); pBlood->decaytime = (SrvParams->decayTime()/2)*MY_CLOCKS_PER_SEC+uiCurrentTime; } } ///////// For Splitting NPCs /// McCleod if ((pc_deffender->split>0)&&(pc_deffender->hp>=1)) { if (rand()%100<=pc_deffender->splitchnc) { if (pc_deffender->split==1) splitnum=1; else splitnum=rand()%pc_deffender->split+1; for (splitcount=0;splitcount<splitnum;splitcount++) Npcs->Split(pc_deffender); } } //////// End of spliting NPCs } if (pc_attacker->isPlayer()) if((fightskill==ARCHERY && los)|| fightskill!=ARCHERY) doSoundEffect(pc_attacker, fightskill, pWeapon); if (pc_deffender->hp<0) pc_deffender->hp=0; updatestats((pc_deffender), 0); x = pc_deffender->id(); if (x>=0x0190) { if (!pc_deffender->onhorse) npcaction(pc_deffender, 0x14); } } } }