这个是一个比较老的Mangos服务端的脚本代码。应用在Scriptdev2脚本中。次代码比较老了,不错作为参考使用还是可以的。
可以借鉴该思路,然后做出自己的脚本
#include "../sc_defines.h"
#include "../../../../game/Item.h"
#include "../../../../game/Player.h"
#include "../../../../game/SpellAuras.h"
#include "../../../../game/GossipDef.h"
#include "../../../../game/Chat.h"
bool GossipHello_ItemUse_honor_arena(Player *player, Item* _Item, SpellCastTargets const& targets)
{
player->CLEAR_GOSSIP_MENU();
if (!player->isDead())
{
player->SEND_GOSSIP_MENU(999999,_Item->GetGUID());
return true;
}
else
{
return true;
}
}
void SendDefaultMenu_ItemUse_honor_arena(Player *player, Item *_Item, uint32 action ,SpellCastTargets const& targets)
{
GetconfigHoner<<" 积分换荣誉点-多少积分换一荣誉点: "<<player->GetMyintConfig("IntegralDealHonor");
GetconfigArena<<" 积分换竞技点-多少积分换一竞技点: "<<player->GetMyintConfig("IntegralDealArena");
GetconfigMaxLevel<<" 最少多少等级-才能开始交易: "<<player->GetMyintConfig("MaxLevelDealHonorArena");
switch(action) {
//【高级陆地坐骑】
case GOSSIP_ACTION_INFO_DEF + 1 :
player->ADD_GOSSIP_ITEM( 0, GetconfigHoner.str().c_str(), 2, GOSSIP_ACTION_INFO_DEF + 1);
player->ADD_GOSSIP_ITEM( 0, GetconfigArena.str().c_str(), 2, GOSSIP_ACTION_INFO_DEF + 2);
player->ADD_GOSSIP_ITEM( 0, GetconfigMaxLevel.str().c_str(), 2, GOSSIP_ACTION_INFO_DEF + 5);
player->ADD_GOSSIP_ITEM( 7, "需要积分为0,为关闭状态 ", 3, GOSSIP_ACTION_INFO_DEF + 99);
player->SEND_GOSSIP_MENU(999999,_Item->GetGUID());
break;
}
}
bool GossipSelect_ItemUse_honor_arena(Player *player, Item *_Item, uint32 sender, uint32 action ,SpellCastTargets const& targets)
{
int icount = 0;
//uint32 price_city;
switch(sender) {
// 主选单
case 1 :
SendDefaultMenu_ItemUse_honor_arena(player, _Item, action,targets);
break;
case 2 ://积分交易开始
// 等级交易,金币交易系统的公式开始
uint32 jf = player->GetAccountJf(player->GetSession()->GetAccountId());//获得用户当前积分
uint32 jfpointhoner = player->GetMyintConfig("IntegralDealHonor"); //获得配置文件多少积分换一个荣誉点
uint32 jfpointarena = player->GetMyintConfig("IntegralDealArena");//获得配置文件多少积分换一个竞技点
uint32 HonerNow = player->GetHonorPoints(); //获得当前用户的荣誉点
uint32 ArenaNow = player->GetArenaPoints(); //获得当前用户的荣誉点
if (jfpointhoner > 0)
honerjfless = jf - 1; //交易荣誉点后用户的积分
if (jfpointarena > 0)
arenajfless = jf - 1; //交易竞技点后用户的积分
else
return false;
uint64 guid; //获得当前用户的帐号ID
guid = player->GetSession()->GetAccountId();
// 等级荣誉点,竞技点交易系统的公式结束
switch(action) {
case GOSSIP_ACTION_INFO_DEF + 1 : //积分换荣誉点
if (jf > 0 && jfpointhoner >= 1 && plevel >= player->GetMyintConfig("MaxLevelDealHonorArena"))
{
player->SetAccountJf(honerjfless,guid);
player->SetHonorPoints(HonerNow+jfpointhoner); //交易积分后,用户获得的荣誉点+1
player->CLOSE_GOSSIP_MENU();
}
else
{
player->GetSession()->SendAreaTriggerMessage("对不起积分不够,或则交易系统关闭中");
GossipHello_ItemUse_honor_arena(player,_Item,targets);
}
break;
case GOSSIP_ACTION_INFO_DEF + 2 : //积分换竞技点
if (jf > 0 && jfpointarena >= 1 && plevel >= player->GetMyintConfig("MaxLevelDealHonorArena"))
{
player->SetAccountJf(arenajfless,guid);
player->SetArenaPoints(ArenaNow+jfpointarena);
player->CLOSE_GOSSIP_MENU();
}
else
{
player->GetSession()->SendAreaTriggerMessage("对不起积分不够,或则交易系统关闭中");
GossipHello_ItemUse_honor_arena(player,_Item,targets);
}
break;
case GOSSIP_ACTION_INFO_DEF + 99 :
{
GossipHello_ItemUse_honor_arena(player,_Item,targets);//返回菜单
break;
}
}
break;
}
return true;
}
void AddSC_honor_arena()
{
Script *newscript;
newscript = new Script;
newscript->Name="honor_arena";
newscript->pItemUse = GossipHello_ItemUse_honor_arena;
newscript->pGossipSelect_Item = GossipSelect_ItemUse_honor_arena;
m_scripts[nrscripts++] = newscript;
}
|