rendered paste bodyvoid AdminManager::AwardToTarget(int gmClientNum, Client* target, RewardData& data){ if (!target || !target->GetCharacterData()) { psserver->SendSystemError(gmClientNum, "Invalid target to award"); return; } psCharacter * pchar = target->GetCharacterData(); if(pchar->IsNPC()) { psserver->SendSystemError(gmClientNum, "You can't use this command on npcs!"); return; } if (data.expDelta) // award exp { AwardExperienceToTarget(gmClientNum, target, data.player, data.expDelta); } if (data.itemName && data.stackCount) // award item { csString text; psItemStats* stats = CacheManager::GetSingleton().GetBasicItemStatsByName(data.itemName); if (!stats) { psserver->SendSystemError(gmClientNum, "You have to specify a valid item name"); } else if (stats->IsMoney()) { psserver->SendSystemError(gmClientNum, "Use the 'money' award to award money, not the 'item' one."); } else if (stats->GetBuyPersonalise()) { psserver->SendSystemError(gmClientNum, "You cannot award personalized items."); } else if (data.stackCount > MAX_STACK_COUNT) { text.Format("The value for the stackCount has to be between 0 and %u", MAX_STACK_COUNT); psserver->SendSystemError(gmClientNum, text); } else // create item { psItem* item = stats->InstantiateBasicItem(true); item->SetStackCount(data.stackCount); item->SetItemQuality(stats->GetQuality()); item->SetLoaded(); pchar->Inventory().AddOrDrop(item); psserver->GetCharManager()->UpdateItemViews(target->GetClientNum()); text.Format("You have been awarded %d %s.", data.stackCount, data.itemName.GetDataSafe()); psserver->SendSystemInfo(gmClientNum, text); text.Format("%s has been awarded %d %s.", target->GetName(), data.stackCount, data.itemName.GetDataSafe()); psserver->SendSystemInfo(gmClientNum, text); Debug4(LOG_ADMIN, client->GetClientNum(), "Created %d %s for %s\n", data.stackCount, data.itemName.GetDataSafe(), target->GetName()); } } if (data.factionName && data.factionDelta) // award faction { AdjustFactionStandingOfTarget(gmClientNum, target, data.factionName, data.factionDelta); } if (data.skillName) // award skill { psSkillInfo * skill = CacheManager::GetSingleton().GetSkillByName(data.skillName); if(ApplySkill(gmClientNum, target->GetActor(), skill, data.skillDelta, data.relativeSkill, data.skillCap) && target) { psserver->GetProgressionManager()->SendSkillList(target, false); } } if (data.type) // award money { bool valid = true; Money_Slots type; if(data.moneyType == "trias") type = MONEY_TRIAS; else if(data.moneyType == "hexas") type = MONEY_HEXAS; else if(data.moneyType == "octas") type = MONEY_OCTAS; else if(data.moneyType == "circles") type = MONEY_CIRCLES; else valid = false; if (valid) { int value; if (data.moneyCount) value = data.moneyCount; else value = psserver->rng->Get(INT_MAX-1)+1; psMoney money; money.Set(type, value); pchar->AdjustMoney(money, false); psserver->GetCharManager()->SendPlayerMoney(target); Debug4(LOG_ADMIN, gmClientNum, "Created %d %s for %s\n", value, data.moneyType.GetDataSafe(), pchar->GetCharName()); } else { psserver->SendSystemError(gmClientNum, "Invalid money type"); } }}