bool cCharStuff::cBankerAI::Withdraw(int c, P_CHAR pBanker, const string& comm) { P_CHAR pc_currchar = currchar[c]; int beginoffset ; int endoffset ; string value2 ; int value=0 ; if ((beginoffset=comm.find_first_of("0123456789")) != string::npos) { if ((endoffset=comm.find_first_not_of("0123456789",beginoffset))== string::npos) endoffset = comm.length(); value2= comm.substr(beginoffset,endoffset-beginoffset); value = str2num(value2) ; } else value = 0 ; if (pc_currchar->CountBankGold() >= value) { int goldcount = value; addgold(c, goldcount); goldsfx(c, goldcount); DeleBankItem(pc_currchar, 0x0EED, 0, goldcount); sprintf(temp, "%s here is your withdraw of %i.", pc_currchar->name.c_str(), goldcount); npctalk(c, pBanker, temp, 1); return true; } else sprintf(temp, "%s you have insufficent funds!", pc_currchar->name.c_str()); npctalk(c, pBanker, temp, 1); return true; }
static bool ItemDroppedOnGuard(NXWCLIENT ps, PKGx08 *pp, P_ITEM pi) { if (ps == NULL) return false; VALIDATEPIR(pi, false); char temp[TEMP_STR_SIZE]; //xan -> this overrides the global temp var NXWSOCKET s=ps->toInt(); P_CHAR pc = ps->currChar(); VALIDATEPCR(pc,false); P_CHAR pc_t=pointers::findCharBySerial(pp->Tserial); //the guard VALIDATEPCR(pc_t,false); // Search for the key word "the head of" if( strstr( pi->getCurrentNameC(), "the head of" ) ) //!!! Wrong! it must check the ItemID, not the name :( { // This is a head of someone, see if the owner has a bounty on them P_CHAR own=pointers::findCharBySerial(pi->getOwnerSerial32()); VALIDATEPCR(own,false); if( own->questBountyReward > 0 ) { // Give the person the bounty assuming that they are not the // same person as the reward is for if( pc->getSerial32() != own->getSerial32() ) { // give them the gold for bringing the villan to justice addgold( s, own->questBountyReward ); pc->playSFX( goldsfx( own->questBountyReward ) ); // Now thank them for their hard work sprintf( temp, TRANSLATE("Excellent work! You have brought us the head of %s. Here is your reward of %d gold coins."), own->getCurrentNameC(), own->questBountyReward ); pc_t->talk( s, temp, 0); // Delete the Bounty from the bulletin board BountyDelete(own ); // xan : increment fame & karma :) pc->modifyFame( ServerScp::g_nBountyFameGain ); pc->IncreaseKarma(ServerScp::g_nBountyKarmaGain); } else pc_t->talk( s, TRANSLATE("You can not claim that prize scoundrel. You are lucky I don't strike you down where you stand!"),0); // Delete the item pi->Delete(); } } return true; }
static bool ItemDroppedOnGuard(P_CLIENT ps, PKGx08 *pp, P_ITEM pi) { UOXSOCKET s=ps->GetSocket(); CHARACTER cc=ps->GetCurrChar(); P_CHAR pc_currchar = MAKE_CHARREF_LRV(cc,false); int t=calcCharFromSer(pp->Tserial); // Search for the key word "the head of" if( strstr( pi->name, "the head of" ) ) { // This is a head of someone, see if the owner has a bounty on them int nCharIdx = calcCharFromSer( pi->ownserial ); if( chars[nCharIdx].questBountyReward > 0 ) { // Give the person the bounty assuming that they are not the // same person as the reward is for if( pc_currchar->serial != chars[nCharIdx].serial ) { // give them the gold for bringing the villan to justice addgold( s, chars[nCharIdx].questBountyReward ); goldsfx( s, chars[nCharIdx].questBountyReward ); // Now thank them for their hard work sprintf((char*) temp, "Excellent work! You have brought us the head of %s. Here is your reward of %d gold coins.", chars[nCharIdx].name, chars[nCharIdx].questBountyReward ); npctalk( s, t, (char*)temp, 0); // Delete the Bounty from the bulletin board Bounty->BountyDelete( chars[nCharIdx].serial ); // Adjust their karma and fame back to what it was before the beheading! pc_currchar->fame += 100; pc_currchar->karma += 100; } else npctalk(s, t, "You can not claim that prize scoundrel. You are lucky I don't strike you down where you stand!",0); // Delete the item Items->DeleItem(pi); return true; } } return false; }
void cDragItems::dropOnGuard( P_CLIENT client, P_ITEM pItem, P_CHAR pGuard ) { // Only heads for bountys are accepted if( !pItem->name().contains( "the head of" ) || !pItem->owner()) { pGuard->talk( "Bring that to a merchant if you want to sell it!" ); client->sysMessage( "I do not want that, citizen!" ); bounceItem( client, pItem ); return; } P_CHAR pVictim = pItem->owner(); if( pVictim->questBountyReward() <= 0 ) { pGuard->talk( "You can not claim a prize for innocent citizens!. You are lucky I don't strike you down where you stand!" ); bounceItem( client, pItem ); return; } if( pVictim == client->player() ) { pGuard->talk( "You can not claim that prize scoundrel. You are lucky I don't strike you down where you stand!" ); Items->DeleItem( pItem ); // The guard wont give the head back... return; } addgold( client->socket(), pVictim->questBountyReward() ); goldsfx( client->socket(), pVictim->questBountyReward() ); Bounty->BountyDelete( pVictim->serial ); // Thank them for their work pGuard->talk( QString( "Excellent work! You have brought us the head of %1. Here is your reward of %2 gold coins." ).arg( pVictim->name.c_str() ).arg( pVictim->questBountyReward() ) ); client->player()->karma += 100; }
void cTrade::sellaction(int s) { int i, amt, value=0, totgold=0; P_ITEM pRestock = NULL; P_ITEM pNoRestock = NULL; P_ITEM pSellCont = NULL; if (buffer[s][8]!=0) { P_CHAR pc_n = FindCharBySerial(calcserial(buffer[s][3], buffer[s][4], buffer[s][5], buffer[s][6])); if (pc_n == NULL) return; P_ITEM pi; unsigned int ci; vector<SERIAL> vecContainer = contsp.getData(pc_n->serial); for ( ci = 0; ci < vecContainer.size(); ci++) { pi = FindItemBySerial(vecContainer[ci]); if (pi->layer==0x1A) pRestock = pi; // Buy Restock container else if (pi->layer==0x1B) pNoRestock = pi; // Buy no restock container else if (pi->layer==0x1C) pSellCont = pi; // Sell container } // Pre Calculate Total Amount of selling items to STOPS if the items if greater than SELLMAXITEM - Magius(CHE) int maxsell=0; i=buffer[s][8]; if (i>256) return; for (i=0;i<buffer[s][8];i++) { amt=ShortFromCharPtr(buffer[s]+9+(6*i)+4); maxsell+=amt; } if (maxsell>SrvParams->sellmaxitem()) { char tmpmsg[256]; sprintf(tmpmsg,"Sorry %s but i can buy only %i items at time!",currchar[s]->name.c_str(),SrvParams->sellmaxitem()); npctalkall(pc_n, tmpmsg,0); return; } for (i=0;i<buffer[s][8];i++) { P_ITEM pSell=FindItemBySerPtr(buffer[s]+9+(6*i)); // the item to sell if (!pSell) continue; amt=ShortFromCharPtr(buffer[s]+9+(6*i)+4); // player may have taken items out of his bp while the sell menu was up ;-) if (pSell->amount<amt) { npctalkall(pc_n, "Cheating scum! Leave now, before I call the guards!",0); return; } // Search the buy restock Container P_ITEM join = NULL; ci=0; P_ITEM pi; vector<SERIAL> vecContainer = contsp.getData(pRestock->serial); for ( ci = 0; ci < vecContainer.size(); ci++) { pi = FindItemBySerial(vecContainer[ci]); if (items_match(pi,pSell)) join = pi; } // Search the sell Container to determine the price ci=0; vecContainer.clear(); vecContainer = contsp.getData(pSellCont->serial); for ( ci = 0; ci < vecContainer.size(); ci++) { pi = FindItemBySerial(vecContainer[ci]); if (items_match(pi,pSell)) { value=pi->value; value=calcValue(pSell, value); if (SrvParams->trade_system()==1) value=calcGoodValue(currchar[s], pSell, value, 1); // Fixed for adv trade --- by Magius(CHE) § break; // let's take the first match } } totgold+=(amt*value); // add to the bill if (join != NULL) // The item goes to the container with restockable items { join->amount+=amt; join->restock-=amt; pSell->ReduceAmount(amt); } else { pSell->SetContSerial(pNoRestock->serial); SndRemoveitem(pSell->serial); if (pSell->amount!=amt) Commands->DupeItem(s, pSell, pSell->amount-amt); } } addgold(s, totgold); goldsfx(s, totgold); // Dupois, SFX for gold movement // Added Oct 08, 1998 } char clearmsg[9]; clearmsg[0]=0x3B; clearmsg[1]=0x00; clearmsg[2]=0x08; clearmsg[3]=buffer[s][3]; clearmsg[4]=buffer[s][4]; clearmsg[5]=buffer[s][5]; clearmsg[6]=buffer[s][6]; clearmsg[7]=0x00; Xsend(s, clearmsg, 8); }