本文整理汇总了C++中Mob::CastToNPC方法的典型用法代码示例。如果您正苦于以下问题:C++ Mob::CastToNPC方法的具体用法?C++ Mob::CastToNPC怎么用?C++ Mob::CastToNPC使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mob
的用法示例。
在下文中一共展示了Mob::CastToNPC方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DepopPet
void Mob::DepopPet()
{
if (HasPet())
{
Mob* mypet = GetPet();
SetPet(nullptr);
if (!mypet->IsCharmed())
mypet->CastToNPC()->Depop();
}
// kill summoned pet even if charmed
uint16 petID = entity_list.GetSummonedPetID(this);
if (petID)
{
Mob* pet = entity_list.GetMobID(petID);
if (pet)
pet->SetOwnerID(0);
}
}
示例2: ProcessOP_Beg
void Client::ProcessOP_Beg(APPLAYER* pApp)
{
/* if(pApp->size != sizeof(Beg_Struct))
{
cout << "Wrong size on OP_Beg. Got: " << pApp->size << ", Expected: " << sizeof(Beg_Struct) << endl;
return;
}*/
if(pApp->size = sizeof(Beg_Struct))
{
Beg_Struct* beg_info = (Beg_Struct*)pApp->pBuffer;
Message(BLACK,"Begging makes zone a sad panda :( (Our struct is wrong)");
beg_info->success = 0;
QueuePacket(pApp);
}
else
{
//Yeahlight: Purge client's invisibility
CancelAllInvisibility();
Beg_Struct* beg_info = (Beg_Struct*)pApp->pBuffer;
Mob* target = entity_list.GetMob(beg_info->target);
Mob* player = entity_list.GetMob(beg_info->begger);
//Beg_Struct* beg_info = (Beg_Struct*)pApp->pBuffer;
// Validate Player
// Added this check to keep people from fudging packets to make
// mobs attack other through begging. Flag as a hack also.
if(this->GetID() != player->GetID())
{
cout << "[ hack ]" << this->GetName() << " is begging for another player: ";
cout << player->GetName() << endl;
// This will make the client not able to beg anymore.
// Could we send qa packet back with 'beg_info->success = 0?
// Nah, I'd rather just leave the hackers with a broken client. -neorab
return;
}
// Validate Time
// Should not be able to send two beg requests within 10 seconds.
// Flag beg spammers as hackers. Drop the packet and move on.
int32 time_to_beg = beg_timer->GetRemainingTime();
if(time_to_beg != 0)
{
cout << "[ hack ]" << player->GetName() << " is begging to fast. ";
cout << 10000 - time_to_beg << "ms since last beg." << endl;
// This will make the client not able to beg anymore.
return;
}
beg_timer->Start(10000);
// Validate Target
// Should not be able to beg from other players, corpses or pets.
// Basiclly, the client will have to have the same thing targeted
// as the packet says they do. If they target a pet and send a beg
// packet with the pet as the target, this won't catch it. But it'll
// stop the average dumbass forging packets.
Mob* tmptar = this->GetTarget();
if((tmptar->GetID() != target->GetID()) || target->IsNPC() != true)
{
cout << "[ hack ]" << player->GetName() << " is begging from: " << target->GetName();
cout << "but has [" << tmptar->GetName() << "] targeted." << endl;
// This will make the client not able to beg anymore.
return;
}
// Validate Skill
// Look the skill up, flag the account for hacks if they don't match.
int8 beg_skill = this->GetSkill(BEGGING);
if(beg_skill != beg_info->skill)
{
cout << "[ hack ]" << player->GetName() << " is trying to beg at " << beg_info->skill;
cout << "but is [" << beg_skill << "] skill." << endl;
// This will make the client not able to beg anymore.
return;
}
// Pets.
// You cannot succeed or crit fail on pets.
if(target->CastToNPC()->GetOwner() == 0)
{
// Roll The Dice for Success
// the threshold is the number you have to be under to have begged successfully
// skill level / 8000 (0 - 4% liner based on skill)
// + Charisma Modifier (same as skill level) * active charisma % (20% for ever 51 levels)
double success_threshold = ((double)beg_skill / 8000)
+ (( (int)((double)beg_skill / 51) * 0.20) * ((double)player->GetCHA() / 8500));
double the_dice = MakeRandomFloat(0.000, 1.000);
if(the_dice <= success_threshold)
{
char message[255];
sprintf(message, "%s says, \"Here %s, take this and LEAVE ME ALONE!\"", target->GetName(), player->GetName());
//.........这里部分代码省略.........
示例3: SpellEffect
///////////////////////////////////////////////////
// Quagmire - that case above getting to long and spells are gonna have a lot of cases of their own
// Cofruben - Reorganised this a little.
void Mob::SpellEffect(Mob* caster, Spell* spell, int8 caster_level, bool partialResist)
{
//Spells not loaded!
if(!spells_handler.SpellsLoaded())
return;
//Spell not loaded!
if(!spell)
return;
//Yeahlight: Caster was not supplied
if(!caster)
return;
int i = 0;
const int16 spell_id = spell->GetSpellID();
const char* teleport_zone = spell->GetSpellTeleportZone();
// 1. Is it a buff? If so, handle its time based effects.
if (spell->IsBuffSpell())
spells_handler.HandleBuffSpellEffects(caster, this, spell);
// 2. Handle its single-time effect.
for (i = 0; i < EFFECT_COUNT; i++)
{
TSpellEffect effect_id = spell->GetSpellEffectID(i);
if(effect_id == SE_Blank || effect_id == 0xFF)
continue;
int8 formula = spell->GetSpellFormula(i);
sint16 base = spell->GetSpellBase(i);
sint16 max = spell->GetSpellMax(i);
sint32 amount = spells_handler.CalcSpellValue(spell, i, caster_level);
//Yeahlight: This is an NPC and had a detremental spell casted upon it
if(this->IsNPC() && (spell->IsDetrimentalSpell() || spell->IsUtilitySpell()))
{
CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): aggroing %s because of the spell effect!", spell->GetSpellName(), this->GetName());
//Yeahlight: Generate hate based on the spells's effect type
sint16 tempHate = GetSpellHate(effect_id, spell->GetMinLevel(), false, amount);
if(tempHate)
{
this->CastToNPC()->AddToHateList(caster, 0, tempHate);
}
}
switch(effect_id)
{
case SE_CurrentHP:
case SE_CurrentHPOnce:
{
sint32 OldHP = this->GetHP();
sint32 damage = amount;
//Yeahlight: Partial resist calculations
if(partialResist)
{
damage = damage / 2;
damage = damage * (float)((float)(rand()%90 + 10) / 100.00f);
if(caster->IsClient() && caster->CastToClient()->GetDebugMe())
caster->Message(YELLOW, "Debug: Your direct damage spell resist has been upgrade to a partial resist.");
}
this->ChangeHP(caster, damage, spell_id);
sint32 NewHP = this->GetHP();
CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You changed %s's hp by %+i.", spell->GetSpellName(), this->GetName(), damage);
break;
}
case SE_MovementSpeed:
{
//Yeahlight: Handled client side
CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a Movement Speed spell, amount: %i.", spell->GetSpellName(), amount);
break;
}
case SE_AttackSpeed:
{
//Yeahlight: There should not be any work to be done here
CAST_CLIENT_DEBUG_PTR(caster)->Log(CP_SPELL, "Mob::SpellEffect(spell_name = %s): You casted a Attack Speed spell, amount: %i.", spell->GetSpellName(), amount);
break;
}
case SE_Invisibility:
{
this->SetInvisible(true);
//Yeahlight: Castee has a pet; remove it
if(GetPet())
{
Mob* myPet = GetPet();
//Yeahlight: Castee's pet is an NPC
if(myPet->IsNPC())
{
//Yeahlight: Castee's pet is a charmed NPC
if(myPet->CastToNPC()->IsCharmed())
{
myPet->CastToNPC()->BuffFadeByEffect(SE_Charm);
}
//Yeahlight: Castee's pet is a summoned NPC
else
{
myPet->Depop();
}
}
//Yeahlight: Castee's pet is a charmed PC
else if(myPet->IsClient() && myPet->CastToClient()->IsCharmed())
{
//.........这里部分代码省略.........
示例4: Process
//.........这里部分代码省略.........
{
this->SendEmoteMessage(sus->adminname, 0, 0, "Zone #%i Uptime: %02ih %02im %02is", sus->zoneserverid, h, m, s);
}
else
{
this->SendEmoteMessage(sus->adminname, 0, 0, "Zone #%i Uptime: %02im %02is", sus->zoneserverid, m, s);
}
break;
}
case ServerOP_Petition:
{
cout << "Got Server Requested Petition List Refresh" << endl;
ServerPetitionUpdate_Struct* sus = (ServerPetitionUpdate_Struct*) pack->pBuffer;
if (sus->status = 0)
{
petition_list.ReadDatabase();
}
else if (sus->status = 1)
{
petition_list.ReadDatabase(); // Until I fix this to be better....
}
break;
}
case ServerOP_RemoveBoat: // Tazadar (06/12/09) : We remove the boat from the zone
{
BoatName_Struct* bs = (BoatName_Struct*) pack->pBuffer;
cout << "Trying to remove the boat : " << bs->boatname << endl;
Mob * tmp = entity_list.GetMob(bs->boatname);
if(tmp){
tmp->CastToNPC()->Depop(false);
entity_list.RemoveNPC(tmp->CastToNPC());
}
break;
}
case ServerOP_ZoneBoat : // Tazadar (06/16/09) : We teleport player to the other zone !
{
cout << "A boat is zoning ! Teleporting clients !" << endl;
ZoneBoat_Struct * zb = (ZoneBoat_Struct *) pack->pBuffer;
Entity * tmp = 0;
Mob * boat = entity_list.GetMob(zb->boatname);
float xboat,yboat,zboat,headingboat;
if(boat){
xboat = boat->GetX();
yboat = boat->GetY();
zboat = boat->GetZ();;
headingboat = boat->GetHeading();
}
else{
cerr << "Error in ServerOP_ZoneBoat boat : "<< zb->boatname << " does not exist."<<endl;
break;
}
char * clients = (char *) pack->pBuffer;
char zone[16] = "";
strcpy(zone, zb->zonename);
char name[30];
float x,y,z,heading;
for(int i=0 ; i < zb->numberOfPlayers ; i++){
memcpy(name,clients+sizeof(ZoneBoat_Struct)+30*i,30*sizeof(char));
cout << "Trying to teleport : "<< name << endl;
tmp = entity_list.GetClientByName(name);
if(tmp != 0 && tmp->IsClient()){