00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <weapons/WeaponGiveScore.h>
00022 #include <weapons/AccessoryStore.h>
00023 #include <engine/ActionController.h>
00024 #include <tank/TankContainer.h>
00025 #include <tank/TankTeamScore.h>
00026 #include <tank/TankScore.h>
00027 #include <common/Defines.h>
00028 #include <common/ChannelManager.h>
00029 #include <lang/LangResource.h>
00030
00031 REGISTER_ACCESSORY_SOURCE(WeaponGiveScore);
00032
00033 WeaponGiveScore::WeaponGiveScore()
00034 {
00035
00036 }
00037
00038 WeaponGiveScore::~WeaponGiveScore()
00039 {
00040
00041 }
00042
00043 bool WeaponGiveScore::parseXML(AccessoryCreateContext &context, XMLNode *accessoryNode)
00044 {
00045 if (!Weapon::parseXML(context, accessoryNode)) return false;
00046
00047 if (!accessoryNode->getNamedChild("score", score_)) return false;
00048
00049 return true;
00050 }
00051
00052 void WeaponGiveScore::fireWeapon(ScorchedContext &context,
00053 WeaponFireContext &weaponContext, FixedVector &position, FixedVector &velocity)
00054 {
00055 context.getActionController().addAction(
00056 new CallbackWeapon("WeaponGiveScore", this, 0, 0,
00057 weaponContext, position, velocity));
00058 }
00059
00060 void WeaponGiveScore::weaponCallback(
00061 ScorchedContext &context,
00062 WeaponFireContext &weaponContext, FixedVector &position, FixedVector &velocity,
00063 unsigned int userData)
00064 {
00065 Tank *tank = context.getTankContainer().getTankById(weaponContext.getPlayerId());
00066 if (!tank) return;
00067
00068 tank->getScore().setScore(tank->getScore().getScore() + score_);
00069 if (tank->getTeam() > 0)
00070 {
00071 context.getTankTeamScore().addScore(score_, tank->getTeam());
00072 }
00073
00074 {
00075 if (score_ > 0)
00076 {
00077 ChannelText text("combat",
00078 LANG_RESOURCE_2("TANK_GET_SCORE",
00079 "[p:{0}] received {1} bonus score",
00080 tank->getTargetName(),
00081 S3D::formatStringBuffer("%i", score_)));
00082 ChannelManager::showText(context, text);
00083 }
00084 else
00085 {
00086 ChannelText text("combat",
00087 LANG_RESOURCE_2("TANK_LOST_SCORE",
00088 "[p:{0}] lost {1} bonus score",
00089 tank->getTargetName(),
00090 S3D::formatStringBuffer("%i", -score_)));
00091 ChannelManager::showText(context, text);
00092 }
00093 }
00094 }
00095