Новые сообщения · Участники · Правила форума · Поиск · RSS
  • Страница 1 из 1
  • 1
[MOD] XP Trader
Дата: Понедельник, 08.09.2014, 22:34 | Сообщение # 1
Постоянный
Сообщений:
1365
Награды:
1
Репутация:
16
Замечания:
0%
Вот решил от нечего делать попробовать написать продавца опыта. На ласт
реве мангоса комплится без ошибок. В игре ничего не проверял. Цены
брались примерные, если надо могу сделать то же, но с покупкой за хонор.

Инструкция по установке:
1. Создать файл npc_xp.cpp здесь:
папка_с_исходниками/mangos/src/bindings/scriptdev2/scripts/custom. Не
забудьте перед этим положить папку scriptdev2 в папку bindings.
2. Скопировать весь этот большой код в наш файл.
3. Зайти в папка_с_исходниками/mangos/src/bindings/scriptdev2/system, найти там ScriptLoader.cpp, открыть его, найти
// custom
и дописать ниже
extern void AddSC_npc_xp();
4. Еще ниже опять найти //custom и дописать
AddSC_npc_xp();
5. Заходим в папка_с_исходниками/mangos/src/bindings/scriptdev2/VC80
или VC90 (для VC100 хз как), открываем имеющийся там проект любым
тестовым редактором, находим
<Filter
Name="custom"
>
</Filter>
и заменяем на
<Filter
Name="custom"
>
<File
RelativePath="..\scripts\custom\npc_xp.cpp"
>
</File>
</Filter>
Все, патч установлен. Теперь можно смело компилить ядро.
Вот npc_xp.cpp:

Код
/* Copyright (C) 2006 - 2011 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>  
   * This program is free software; you can redistribute it and/or modify  
   * it under the terms of the GNU General Public License as published by  
   * the Free Software Foundation; either version 2 of the License, or  
   * (at your option) any later version.  
   *  
   * This program is distributed in the hope that it will be useful,  
   * but WITHOUT ANY WARRANTY; without even the implied warranty of  
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
   * GNU General Public License for more details.  
   *  
   * You should have received a copy of the GNU General Public License  
   * along with this program; if not, write to the Free Software  
   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  
   */  

  /* ScriptData  
  SDName: npc_xp  
  SD%Complete: 100%  
  SDAuthor: staford  
  SDComment: need test  
  SDCategory: custom  
  EndScriptData */  

  #include "precompiled.h"  
  long long int money;  
  int costo;  

  bool GossipHello_npc_xp(Player *player, Creature *_Creature)  
  {  
          player->ADD_GOSSIP_ITEM( 5, "1000 XP. 2 Gold"                , GOSSIP_SENDER_MAIN, 99995);  
          player->ADD_GOSSIP_ITEM( 5, "5000 XP. 10 Gold"                , GOSSIP_SENDER_MAIN, 99996);  
          player->ADD_GOSSIP_ITEM( 5, "10000 XP. 20 Gold"               , GOSSIP_SENDER_MAIN, 99997);  
          player->ADD_GOSSIP_ITEM( 5, "50000 XP. 100 Gold"            , GOSSIP_SENDER_MAIN, 99998);  
          player->ADD_GOSSIP_ITEM( 5, "100000 XP. 200 Gold"            , GOSSIP_SENDER_MAIN, 99999);  
       player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,_Creature->GetObjectGuid());  
      return true;  
  }  

  void SendDefaultMenu_mob_teleguy(Player *player, Creature *_Creature, uint32 action )  
  {  
      if(player->getLevel() >= 80  )  
      {  
           player->CLOSE_GOSSIP_MENU();  
          _Creature->MonsterSay("You have reached max level!", LANG_UNIVERSAL);  
          return;  
      }  

      money = player-> GetMoney();  
      costo = 20000;  

      if (money < costo )  
      {  
          player->CLOSE_GOSSIP_MENU();  
          _Creature->MonsterSay("You haven't enough money", LANG_UNIVERSAL);  
          return;  
      }  

  switch(action)  
  {  
  case 99995: // 1000xp  
  player->CLOSE_GOSSIP_MENU();  
  player->GiveXP(1000, NULL);  
  player->ModifyMoney(-1*costo);  
  break;  

  case 99996: // 5000xp  
  player->CLOSE_GOSSIP_MENU();  
  player->GiveXP(5000, NULL);  
  player->ModifyMoney(-5*costo);  
  break;  

  case 99997: // 10000xp  
  player->CLOSE_GOSSIP_MENU();  
  player->GiveXP(10000, NULL);  
  player->ModifyMoney(-10*costo);  
  break;  

  case 99998: // 50000xp  
  player->CLOSE_GOSSIP_MENU();  
  player->GiveXP(50000, NULL);  
  player->ModifyMoney(-50*costo);  
  break;  

  case 99999: // 100000xp  
  player->CLOSE_GOSSIP_MENU();  
  player->GiveXP(100000, NULL);  
  player->ModifyMoney(-100*costo);  
  break;  
  }  

  }  

  bool GossipSelect_npc_xp(Player *player, Creature *_Creature, uint32 sender, uint32 action)  
  {  
      if (sender == GOSSIP_SENDER_MAIN)  
      {  
          player->PlayerTalkClass->ClearMenus();  
          SendDefaultMenu_mob_teleguy(player, _Creature, action);  
      }  
      return true;  
  }  

  void AddSC_npc_xp()  
  {  
      Script *newscript;  
      newscript = new Script;  
      newscript->Name = "npc_xp";  
      newscript->pGossipHello = &GossipHello_npc_xp;  
      newscript->pGossipSelect = &GossipSelect_npc_xp;  
      newscript->RegisterSelf();  
  }
И традиционный sql в базу (id 99002):

Код
DELETE FROM `creature_template` WHERE `entry`=99002;  
  INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`,  
`difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`,  
`KillCredit2`, `modelid_1`, `modelid_2`, `modelid_3`, `modelid_4`,  
`name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`,
  `minhealth`, `maxhealth`, `PowerType`, `minmana`, `maxmana`, `armor`,  
`faction_A`, `faction_H`, `npcflag`, `speed_walk`, `speed_run`, `scale`,
  `rank`, `mindmg`, `maxdmg`, `dmgschool`, `attackpower`,  
`dmg_multiplier`, `baseattacktime`, `rangeattacktime`, `unit_class`,  
`unit_flags`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`,
  `trainer_class`, `trainer_race`, `minrangedmg`, `maxrangedmg`,  
`rangedattackpower`, `type`, `type_flags`, `lootid`, `pickpocketloot`,  
`skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`,  
`resistance5`, `resistance6`, `spell1`, `spell2`, `spell3`, `spell4`,  
`spell5`, `spell6`, `spell7`, `spell8`, `PetSpellDataId`, `vehicle_id`,  
`mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `unk16`,  
`unk17`, `RacialLeader`, `questItem1`, `questItem2`, `questItem3`,  
`questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`,  
`equipment_id`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`)  
VALUES  
  (99002, 0, 0, 0, 0, 0, 18, 0, 18, 0, 'Archibald', 'XP Trader', NULL, 0, 70, 70, 6700, 24000, 0, 5598, 5875, 4049, 35, 35, 1,  
1.48, 1.14286, 1, 0, 98, 147, 0, 37, 1.4, 1400, 1400, 2, 0, 0, 0, 0, 0,  
0, 0, 78, 118, 30, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, '', 0, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,  
'npc_xp');
  • Страница 1 из 1
  • 1
Поиск: