void *FindInTree( Node t, void *key ) { if ( t == (Node)0 ) return NULL; switch( KeyCmp( key, ItemKey(t->item) ) ) { case -1 : return FindInTree( t->left, key ); case 0: return t->item; case +1 : return FindInTree( t->right, key ); } }
void FireProjectile::HandlePlayerCollision(Player* pPlayer, BaseArena* pArena, ItemLoaderXML* pItemLoader) { // Add a "impulse" to the player. XMFLOAT3 dir = GetDirection(); dir.y = 0.0f; pPlayer->SetVelocity(dir * GetImpactImpulse() * (1-pPlayer->GetKnockBackResistance())); pPlayer->ClearTargetQueue(); // Get item data. Item* item = pItemLoader->GetItem(ItemKey(GetSkillType(), GetSkillLevel())); Player* caster = (Player*)GetWorld()->GetObjectById(GetOwner()); // Damage the player. pPlayer->TakeDamage(item->GetAttributes().damage + caster->GetBonusDamage()); pPlayer->SetLastHitter((Player*)GetWorld()->GetObjectById(GetOwner())); }
void Inventory::AddItem(HudItem* pItem) { // Any free slots? if(!HasFreeSlots()) return; // Remove previous level item. if(pItem->GetLevel() > 1) RemoveItem(GetItemLoader()->GetItem(ItemKey(pItem->GetName(), pItem->GetLevel()-1))); // Add item to player. mPlayer->AddItem(pItem); // Send message to server. SendItemAdded(mPlayer->GetId(), pItem->GetName(), pItem->GetLevel()); // Clear the inventory and update it with the players current items. UpdateItems(); }
void SkillInventory::AddItem(ItemName name, int level) { AddItem(GetItemLoader()->GetItem(ItemKey(name, level))); }