Ru-MaNGOS

Вернуться   Ru-MaNGOS > Разработка скриптов > Патчи

Важная информация

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.04.2012, 19:47   #1
staf0rd
Гость
 
Сообщений: n/a
По умолчанию [MoD] XP Trader

Решил попробовать написать продавца опыта на основе телегая. На ласт реве мангоса комплится без ошибок. В игре ничего не проверял. Цены брались примерные.
Инструкция по установке:
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();
Еще ниже опять найти //custom и дописать
Код:
AddSC_npc_xp();
4. Заходим в папка_с_исходниками/mangos/src/bindings/scriptdev2/VC80 или VC90 (для VC100 хз как), открываем имеющийся там проект любым
тестовым редактором, находим
Код:
<Filter 
Name="custom" 
> 
</Filter>
пишем между > и </Filter>
Код:
<File 
RelativePath="..\scripts\custom\npc_xp.cpp" 
>
Все, патч установлен. Теперь можно смело компилить ядро.
Вот 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% 
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');
Прошу тапками не кидаться, моя первая работа в C++

Последний раз редактировалось staf0rd; 03.05.2012 в 17:22.
  Ответить с цитированием
 

« [script] Guildhouse Keeper | Следующей темы нет »
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 20:59. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot