本文整理汇总了C++中P_CHAR::checkSkill方法的典型用法代码示例。如果您正苦于以下问题:C++ P_CHAR::checkSkill方法的具体用法?C++ P_CHAR::checkSkill怎么用?C++ P_CHAR::checkSkill使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类P_CHAR
的用法示例。
在下文中一共展示了P_CHAR::checkSkill方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: checkSkill
/*!
This checks the needed skill to cast the specified
spell. If scroll is true, the spell is cast
from a scroll and if needed the scrolllow and scrollhigh
values are used instead of the book values. This
function returns true if the check was successful.
*/
bool cNewMagic::checkSkill( P_CHAR pMage, UINT8 spell, bool scroll )
{
UINT16 lowSkill, highSkill;
stNewSpell *sInfo = findSpell( spell );
if( !sInfo )
return false;
// Cut the requirements for scrolls if needed
if( scroll && SrvParams->cutScrollReq() )
{
lowSkill = sInfo->scrolllow;
highSkill = sInfo->scrollhigh;
}
else
{
lowSkill = sInfo->booklow;
highSkill = sInfo->bookhigh;
}
// Do the skill check
if( !pMage->checkSkill( MAGERY, lowSkill, highSkill ) )
{
disturb( pMage, true, -1 );
return false;
}
// Skillcheck completed
return true;
}
示例2: PickPocketTarget
/*!
\brief Steal from a pickpocket, a stealing training dummy
\author Ripper, updated by Endymion
\param ps the client
*/
void Skills::PickPocketTarget(NXWCLIENT ps)
{
if( ps == 0 ) return;
P_CHAR Me = ps->currChar();
VALIDATEPC(Me);
if (Me->skill[STEALING] < 300)
// check if under 30 in stealing
{
Me->checkSkill( STEALING, 0, 1000);
// check their skill
Me->playSFX(0x0249);
// rustling sound..dont know if right but it works :)
}
else
Me->sysmsg(TRANSLATE("You learn nothing from practicing here"));
// if over 30 Stealing..dont learn.
}
示例3: trackingMenu
// Creates the tracking menu (Creature type)
void trackingMenu( cUOSocket *socket )
{
P_CHAR pChar = socket->player();
if( !pChar )
return;
socket->closeGump( 0xFE12ACDE, 0 );
// If we fail a simple check we dont get the menu
if( !pChar->checkSkill( TRACKING, 0, 250 ) )
{
socket->sysMessage( tr( "You seem to be unable to track the traces of creatures who have been here." ) );
return;
}
cTrackingMenu *gump = new cTrackingMenu;
socket->send( gump );
}
示例4: target_lockpick
/*!
\brief lockpicking skill
\author Unknow, rewrite by Endymion
\since 0.53
\param ps the client
*/
void Skills::target_lockpick( NXWCLIENT ps, P_TARGET t )
{
P_CHAR pc = ps->currChar();
VALIDATEPC(pc);
P_ITEM chest=pointers::findItemBySerial( t->getClicked() );
VALIDATEPI(chest);
P_ITEM pick=MAKE_ITEM_REF( t->buffer[0] );
VALIDATEPI(pick);
AMXEXECSVTARGET( pc->getSerial32(),AMXT_SKITARGS,LOCKPICKING,AMX_BEFORE);
if (chest->amxevents[EVENT_IONLOCKPICK]!=NULL)
{
g_bByPass = false;
chest->amxevents[EVENT_IONLOCKPICK]->Call(chest->getSerial32(), pc->getSerial32());
if (g_bByPass==true)
return;
}
/*
chest->runAmxEvent( EVENT_IONLOCKPICK, chest->getSerial32(), s );
if (g_bByPass==true)
return;
*/
if( !item_inRange(pc,pick,1) )
{
pc->sysmsg(TRANSLATE("You are too far away!"));
}
if (chest->magic==4)
{
return;
}
if(!chest->isSecureContainer())
{
pc->sysmsg(TRANSLATE("That is not locked."));
return;
}
if(chest->more1==0 && chest->more2==0 && chest->more3==0 && chest->more4==0)
{ //Make sure it isn't an item that has a key (i.e. player house, chest..etc)
if(pc->checkSkill( LOCKPICKING, 0, 1000))
{
switch(chest->type)
{
case 8: chest->type=1; break;
case 13: chest->type=12; break;
case 64: chest->type=63; break;
default:
LogError("switch reached default");
return;
}
soundeffect3(chest, 0x0241);
pc->sysmsg(TRANSLATE("You manage to pick the lock."));
}
else
{
if((rand()%100)>50)
{
pc->sysmsg( TRANSLATE("You broke your lockpick!"));
pick->ReduceAmount(1);
}
else
pc->sysmsg(TRANSLATE( "You fail to open the lock."));
}
}
else
pc->sysmsg(TRANSLATE("That cannot be unlocked without a key."));
AMXEXECSVTARGET( pc->getSerial32(),AMXT_SKITARGS,LOCKPICKING,AMX_AFTER);
}
示例5: snooping
/*!
\brief Snoop into container
\author Unknow, completly rewritten by Endymion
\param snooper the snooper
\param cont the contanier
*/
void snooping( P_CHAR snooper, P_ITEM cont )
{
VALIDATEPC(snooper);
NXWCLIENT ps = snooper->getClient();
if( ps == NULL ) return;
NXWSOCKET s = ps->toInt();
VALIDATEPI(cont);
P_CHAR owner = cont->getPackOwner();
VALIDATEPC(owner);
char temp[TEMP_STR_SIZE];
if (snooper->getSerial32() == owner->getSerial32())
snooper->showContainer(cont);
else if (snooper->IsGMorCounselor())
snooper->showContainer(cont);
else
if ((char_inRange(snooper, owner, 2)) ||(item_inRange(snooper, cont, 2)))
{
if ( owner->HasHumanBody() && ( owner->getOwnerSerial32()==snooper->getSerial32()))
snooper->showContainer(cont);
else if ( owner->npcaitype == NPCAI_PLAYERVENDOR)
snooper->showContainer(cont);
else
{
if ((cont->getContSerial()>1) && (cont->getContSerial() != snooper->getSerial32()) )
{
if ( owner->amxevents[EVENT_CHR_ONSNOOPED])
{
g_bByPass = false;
owner->amxevents[EVENT_CHR_ONSNOOPED]->Call( owner->getSerial32(), snooper->getSerial32());
if (g_bByPass==true) return;
}
/*
owner->runAmxEvent( EVENT_CHR_ONSNOOPED, owner->getSerial32(), s);
if (g_bByPass==true)
return;
*/
snooper->objectdelay=SrvParms->snoopdelay * MY_CLOCKS_PER_SEC + uiCurrentTime;
if ( owner->IsGMorCounselor())
{
snooper->sysmsg( TRANSLATE("You can't peek into that container or you'll be jailed."));// AntiChrist
sprintf( temp, TRANSLATE("%s is trying to snoop you!"), snooper->getCurrentNameC());
owner->sysmsg(temp);
return;
}
else if (snooper->checkSkill( SNOOPING, 0, 1000))
{
snooper->showContainer(cont);
snooper->sysmsg( TRANSLATE("You successfully peek into that container."));
}
else
{
snooper->sysmsg( TRANSLATE("You failed to peek into that container."));
if ( owner->npc )
owner->talk(s, TRANSLATE("Art thou attempting to disturb my privacy?"), 0);
else {
sprintf( temp, TRANSLATE("You notice %s trying to peek into your pack!"), snooper->getCurrentNameC());
owner->sysmsg( temp );
}
snooper->IncreaseKarma(-ServerScp::g_nSnoopKarmaLoss);//AntiChrist
snooper->modifyFame(-ServerScp::g_nSnoopFameLoss);//AntiChrist
setCrimGrey(snooper, ServerScp::g_nSnoopWillCriminal);
}
}
}
}
else {
snooper->sysmsg(TRANSLATE("You are too far away!"));
}
}
示例6: target_stealing
/*!
\brief Steal something
\author Unknow, completly rewritten by Endymion
\param ps the client
*/
void Skills::target_stealing( NXWCLIENT ps, P_TARGET t )
{
P_CHAR thief = ps->currChar();
VALIDATEPC(thief);
SERIAL target_serial = t->getClicked();
AMXEXECSVTARGET( thief->getSerial32(),AMXT_SKITARGS,STEALING,AMX_BEFORE);
//steal a char
if ( isCharSerial(target_serial) )
{
Skills::target_randomSteal(ps,t);
return;
}
const P_ITEM pi = pointers::findItemBySerial( target_serial );
VALIDATEPI(pi);
//steal a pickpocket, a steal training dummy
if( pi->getId() == 0x1E2D || pi->getId() == 0x1E2C )
{
Skills::PickPocketTarget(ps);
return;
}
//no stealing for items on layers other than 0 (equipped!) , newbie items, and items not being in containers allowed !
if ( pi->layer!=0 || pi->isNewbie() || pi->isInWorld() )
{
thief->sysmsg(TRANSLATE("You cannot steal that."));
return;
}
P_CHAR victim = pi->getPackOwner();
VALIDATEPC(victim);
if (victim->npcaitype == NPCAI_PLAYERVENDOR)
{
thief->sysmsg(TRANSLATE("You cannot steal from player vendors."));
return;
}
if ( (thief->getSerial32() == victim->getSerial32()) || (thief->getSerial32()==victim->getOwnerSerial32()) )
{
thief->sysmsg(TRANSLATE("You catch yourself red handed."));
return;
}
if (thief->distFrom( victim ) == 1)
{
int result;
R32 we = pi->getWeightActual();
int bonus= (int)( (1800 - we)/5 );
if ( thief->checkSkill( STEALING,0,(1000-bonus)) )
{
// 0 stealing 2 stones, 10 3 stones, 99.9 12 stones, 100 17 stones !!!
int cansteal = thief->skill[STEALING] > 999 ? 1700 : thief->skill[STEALING] + 200;
if ( we > cansteal )
{
thief->sysmsg(TRANSLATE("That is too heavy."));
return;
}
if (pi->amxevents[EVENT_IONSTOLEN]!=NULL)
{
g_bByPass = false;
pi->amxevents[EVENT_IONSTOLEN]->Call(pi->getSerial32(), thief->getSerial32(), victim->getSerial32());
if (g_bByPass==true)
return;
}
if (victim->amxevents[EVENT_CHR_ONSTOLEN])
{
g_bByPass = false;
victim->amxevents[EVENT_CHR_ONSTOLEN]->Call(victim->getSerial32(), thief->getSerial32());
if (g_bByPass==true)
return;
}
/*
pi->runAmxEvent( EVENT_IONSTOLEN, pi->getSerial32(), s, victim->getSerial32() );
if (g_bByPass==true)
return;
victim->runAmxEvent( EVENT_CHR_ONSTOLEN, victim->getSerial32(), s );
if (g_bByPass==true)
return;
*/
P_ITEM pack= thief->getBackpack();
VALIDATEPI(pack);
//.........这里部分代码省略.........
示例7: execMake
/*!
\brief executes a "MAKE" command
\author Xanathar
\param pc player who do make
\param n item number
*/
void cMakeMenu::execMake( NXWCLIENT ps, UI32 item )
{
P_CHAR pc = ps->currChar();
if( pc->dead ) {
pc->sysmsg(TRANSLATE("Ever thought an ethereal soul can't really do some actions ?"));
return;
}
cMakeItem* mi = makeItems[item];
if( ( mi==NULL ) || ( mi->command==NULL ) )
return;
if( mi->command->command=="MAKEMENU" ) {
Skills::MakeMenu( pc, str2num( mi->command->param ), skill, mat[0].id, mat[0].color, mat[1].id, mat[1].color );
return;
}
if( pc->IsGM() ) {
mi->command->execute( ps->toInt() );
return;
}
if( !mi->checkReq( pc ) )
return;
bool failed = false;
if( !pc->checkSkill((Skill)mi->skillToCheck, mi->minskill, mi->maxskill) ) {
failed = true;
}
for( int j=0; j<2; ++j ) {
cRawItem& raw = mi->reqitems[j];
if( raw.id!=0 ) {
UI16 matToDel = raw.number;
if( failed )
matToDel = ( matToDel/2>0 )? matToDel/2 : 1;
pc->delItems( raw.id, matToDel, raw.color );
}
}
switch( skill )
{
case MINING :
pc->playSFX(0x0054);
break;
case BLACKSMITHING :
pc->playSFX(0x002A);
break;
case CARPENTRY :
pc->playSFX(0x023D);
break;
case INSCRIPTION :
pc->playSFX(0x0249);
break;
case TAILORING :
pc->playSFX(0x0248);
break;
case TINKERING :
pc->playSFX(0x002A);
break;
case CARTOGRAPHY :
pc->playSFX(0x0249);
break;
}
pc->setObjectDelay();
std::string script;
std::string amount;
splitLine( mi->command->param, script, amount );
if( !failed ) {
P_ITEM pi = item::CreateFromScript( str2num( script ), pc->getBackpack(), (amount!="")? str2num( amount ) : INVALID );
VALIDATEPI(pi);
ps->sysmsg(TRANSLATE("You create the item and place it in your backpack."));
pi->magic = 1;
pi->creator = pc->getCurrentName(); // Memorize Name of the creator
if (pc->skill[skill]>950)
pi->madewith=skill+1; // Memorize Skill used
else
pi->madewith=0-skill-1; // Memorize Skill used ( negative not shown )
}
else {
//.........这里部分代码省略.........