T端(PVP System)PvP物品掉落(最新C++脚本)
2014-05-26 16:32
253 查看
这个是一套T端的魔兽私服单机的脚本文件。首先你得学会如何在Trinity中加入脚本,这里就不细说了!脚本的大致功能是:在每PVP杀死 5, 10, 15, 20, 25, 30 个角色后,进行世界公告(你可以配置是否获得PVP的掉落!).
1、数据库部分,你要把下面的SQL代码导入到你的数据库中去
2、脚本的大致功能是:在每PVP杀死 5, 10, 15, 20, 25, 30 个角色后,进行世界公告(你可以配置是否获得PVP的掉落!).
1、数据库部分,你要把下面的SQL代码导入到你的数据库中去
INSERT INTO `trinity_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES (12001, '[|cffFF0000Battleground :: PvP System|cffFFFF05] %s', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
2、脚本的大致功能是:在每PVP杀死 5, 10, 15, 20, 25, 30 个角色后,进行世界公告(你可以配置是否获得PVP的掉落!).
下面是一些配置代码!都在C++的脚本中
#include "ScriptPCH.h" #include <cstring> /////////////////////// CONFIG ///////////////////////////// ///////////////////////////////////////////////////////////////////// float Version = 2.50f; //不要修改这里 bool PvPSystemEnabled = true; //如果你要关闭PVP系统,这里设置为false bool OnlyInBattlegrounds = true; //如果你只在战场中开启,那么这里设置为true. bool LooseTokenOnPvPDeath = true; //如果你想再杀死敌方的时候获取对方的掉落物品,设置为true. int32 AmountOfItemsYouWantTheVictimToLoose = 1; //杀死敌方掉落的物品的数量. bool AddTokenOnPvPKill = true; //如果你不希望掉落,那么设置为false! int32 ItemReward = 23247; //PVP掉落,你将获得的物品ID int32 AmountOfRewardsOnKillStreak[5] = { 5, 10, 15, 20, 25 }; //获得的物品的数量的一个数组设置. int32 HowManyTimesYouWantTheKillerToGetAwardedForKillingTheSameVictim = 2; //Name speaks for It self. const int32 KillerStreak1 = 05; const int32 KillerStreak2 = 10; const int32 KillerStreak3 = 15; const int32 KillerStreak4 = 20; const int32 KillerStreak5 = 30; int32 KillStreaks[5] = { KillerStreak1, KillerStreak2, KillerStreak3, KillerStreak4, KillerStreak5 }; /////////////////////////////////////////////////////////////////// /////////////////////// END //////////////////////////// ///////////////////////////////////////////////////////////////// struct SystemInfo { uint32 KillStreak; uint32 LastGUIDKill; uint8 KillCount; }; static std::map<uint32, SystemInfo> KillingStreak; class System_OnPvPKill : public PlayerScript { public: System_OnPvPKill() : PlayerScript("System_OnPvPKill") {} void OnPVPKill(Player *pKiller, Player *pVictim) { if(PvPSystemEnabled == false) { return; } else if(PvPSystemEnabled == true) { uint32 kGUID; uint32 vGUID; char msg[500]; kGUID = pKiller->GetGUID(); vGUID = pVictim->GetGUID(); if(kGUID == vGUID) { return; } if(KillingStreak[kGUID].LastGUIDKill == vGUID) { KillingStreak[kGUID].KillCount++; KillingStreak[vGUID].KillCount = 1; pKiller->AddItem(ItemReward, 1); if(LooseTokenOnPvPDeath == true) pVictim->DestroyItemCount(ItemReward, AmountOfItemsYouWantTheVictimToLoose, true, false); ChatHandler(pVictim->GetSession()).PSendSysMessage("You died, because of that you have lost an Event Token!"); } if(KillingStreak[kGUID].LastGUIDKill != vGUID) { KillingStreak[kGUID].KillCount = 1; KillingStreak[vGUID].KillCount = 1; } if(KillingStreak[kGUID].KillCount == HowManyTimesYouWantTheKillerToGetAwardedForKillingTheSameVictim) { return; } if(OnlyInBattlegrounds == true) { if(!pKiller->GetMap()->IsBattleground() || pKiller->GetMapId() == 30) return; } KillingStreak[kGUID].KillStreak++; KillingStreak[vGUID].KillStreak = 0; KillingStreak[kGUID].LastGUIDKill = vGUID; KillingStreak[vGUID].LastGUIDKill = 0; if(AddTokenOnPvPKill == true) pKiller->AddItem(29435, 1); ChatHandler(pKiller->GetSession()).PSendSysMessage("You killed a player therefor you have been rewarded with his soul!"); if(LooseTokenOnPvPDeath == true) pVictim->DestroyItemCount(ItemReward, AmountOfItemsYouWantTheVictimToLoose, true, false); switch(KillingStreak[kGUID].KillStreak) { case KillerStreak1: sprintf(msg, "|cffFF0000%s|cffFFFF05 killed |cffFF0000%s|cffFFFF05 and is on a |cffFF00005|cffFFFF05 kill streak. ", pKiller->GetName(), pVictim->GetName()); sWorld->SendWorldText(LANG_PVPKILL_SYSTEM, msg); //发送PVP的世界公告 pKiller->AddItem(ItemReward, AmountOfRewardsOnKillStreak[1]); pKiller->ModifyHonorPoints(250); pKiller->CastSpell(pKiller, 24378, true); break; case KillerStreak2: sprintf(msg, "|cffFF0000%s|cffFFFF05 killed |cffFF0000%s|cffFFFF05 and is on a |cffFF000010|cffFFFF05 kill streak. ", pKiller->GetName(), pVictim->GetName()); sWorld->SendWorldText(LANG_PVPKILL_SYSTEM, msg); //发送PVP的世界公告 pKiller->AddItem(ItemReward, AmountOfRewardsOnKillStreak[2]); pKiller->ModifyHonorPoints(250); pKiller->CastSpell(pKiller, 24378, true); break; case KillerStreak3: sprintf(msg, "|cffFF0000%s|cffFFFF05 killed |cffFF0000%s|cffFFFF05 and is on a |cffFF000015|cffFFFF05 kill streak. ", pKiller->GetName(), pVictim->GetName()); sWorld->SendWorldText(LANG_PVPKILL_SYSTEM, msg); pKiller->AddItem(ItemReward, AmountOfRewardsOnKillStreak[3]); pKiller->ModifyHonorPoints(250); pKiller->CastSpell(pKiller, 24378, true); break; case KillerStreak4: sprintf(msg, "|cffFF0000%s|cffFFFF05 killed |cffFF0000%s|cffFFFF05 and is on a |cffFF000020|cffFFFF05 kill streak. ", pKiller->GetName(), pVictim->GetName()); sWorld->SendWorldText(LANG_PVPKILL_SYSTEM, msg); pKiller->AddItem(ItemReward, AmountOfRewardsOnKillStreak[4]); pKiller->ModifyHonorPoints(250); pKiller->CastSpell(pKiller, 24378, true); break; case KillerStreak5: sprintf(msg, "|cffFF0000%s|cffFFFF05 killed |cffFF0000%s|cffFFFF05 and is on a |cffFF000030|cffFFFF05 kill streak. ", pKiller->GetName(), pVictim->GetName()); sWorld->SendWorldText(LANG_PVPKILL_SYSTEM, msg); pKiller->AddItem(23247, 25); KillingStreak[kGUID].KillStreak = 0; pKiller->ModifyHonorPoints(250); pKiller->CastSpell(pKiller, 24378, true); break; } } } }; void AddSC_System() { new System_OnPvPKill; }
相关文章推荐
- T端设置PVP物品掉落,防止同IP刷
- T端整合的商业技能训练师C++脚本
- 如何在C++中集成Lua脚本(LuaPlus篇)
- 使用 SpiderMonkey 使 C++应用支持 JavaScript 脚本引擎
- 如何在在Visual C++ .NET 中將System::String* 转换为 Char*
- System函数与脚本的后台执行
- 2007最新c/c++笔试题
- 如何在C++中集成LUA脚本(LuaWrapper For C++篇)
- 导出C++中的类到Lua脚本中的经历
- 《高质量程序设计指南——C++/C》(第三版)最新修订
- 一个模拟简单的物品掉落的程序
- 2006C++之父BS最新大作:Bjarne Stroustrup's FAQ (先报道,即将翻译了)
- 我的第一个 C++ 配合 XML以及GameMonkey脚本的DEMO程序
- 去除C++注释的脚本
- 另一最新的QQ菜单导航脚本
- 一个模拟简单的物品掉落的程序
- 无法找到脚本库“/aspnet_client/system_web/1_1_4322/WebUIValidation.js”
- 使用 SpiderMonkey 使 C++应用支持 JavaScript 脚本引擎