• Страница 1 из 1
  • 1
Модератор форума: staford11  
[MOD] XP Trader
staford11
^s†af0rd f0rever^
Вот решил от нечего делать попробовать написать продавца опыта. На ласт реве мангоса комплится без ошибок. В игре ничего не проверял. Цены брались примерные, если надо могу сделать то же, но с покупкой за хонор.
Инструкция по установке:
1. Создать файл npc_xp.cpp здесь: папка_с_исходниками/mangos/src/bindings/scriptdev2/scripts/custom. Не забудьте перед этим положить папку scriptdev2 в папку bindings.
2. Скопировать весь этот большой код в наш файл.
3. Зайти в папка_с_исходниками/mangos/src/bindings/scriptdev2/system, найти там ScriptLoader.cpp, открыть его, найти
Code
// custom

и дописать ниже
Code
extern void AddSC_npc_xp();

4. Еще ниже опять найти //custom и дописать
Code
AddSC_npc_xp();

5. Заходим в папка_с_исходниками/mangos/src/bindings/scriptdev2/VC80 или VC90 (для VC100 хз как), открываем имеющийся там проект любым тестовым редактором, находим
Code
<Filter
Name="custom"
>
</Filter>

и заменяем на
Code
<Filter
Name="custom"
>
<File
RelativePath="..\scripts\custom\npc_xp.cpp"
>
</File>
</Filter>

Все, патч установлен. Теперь можно смело компилить ядро.
Вот npc_xp.cpp:
Code
/* 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):
Code
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');
Победоносная @ Галакронд
Мои сборки под 3.3.5а 12340

Исправительные работы: в наличии.
Сообщение # 1 написано 14.04.2012 в 22:41
keonji
I ♥ S-PB
Quote (staford11)
player->GiveXP

давно не видел мангос в глаза, разве добавили такое?
Сообщение # 2 написано 15.04.2012 в 00:05
staford11
^s†af0rd f0rever^
Quote (keonji)
давно не видел мангос в глаза, разве добавили такое?

угу. вот тебе маленькая выдержка из player.cpp:
Code
void Player::GiveXP(uint32 xp, Unit* victim)

и смотрим дальше
Code
GiveXP( XP, NULL );
Победоносная @ Галакронд
Мои сборки под 3.3.5а 12340

Исправительные работы: в наличии.
Сообщение # 3 написано 15.04.2012 в 07:30
keonji
I ♥ S-PB
staford11, о, пасяб, давно пытался запилить такого же, функции не было =( Самому писать знания не позволяли.
Сообщение # 4 написано 15.04.2012 в 18:51
САХАЛИН
Центурион
упращают и упращают мангос, скоро будем на бумажке писать словами чё хотим, потом на сканер через finereader и прямиком на компиляцию =)))


Ой ща по саням дам !
http://wow.grin.by
Сообщение # 5 написано 23.04.2012 в 04:12
rsa
Чемпион
Quote (keonji)
давно пытался запилить такого же, функции не было

е-мае, как же давно это было... потому как 5 лет назад функция уже была. в мангосах версий 4ххх.
Если хотите услышать ответ - правильно задайте вопрос.
НЕ помогаю людям, ничего не понимающим в том, что они делают.
MangosR2 project home
Сообщение # 6 написано 23.04.2012 в 14:24
Givemesmoke
Скаут
Quote (staford11)
void SendDefaultMenu_mob_teleguy(Player *player, Creature *_Creature, uint32 action ) { *** }

Quote (staford11)
SendDefaultMenu_mob_teleguy(player, _Creature, action);

Нынче видимо модно программировать мышкой, ну да о чем говорить, когда в MaNGOS Help светилась тема по поводу проблемы с ужасно-непонятной ошибкой по объявлению функции (её оказывается ещё объявить то нужно)... чего ещё можно ожидать от "местных". Собственно "зборщики" (алсо авторы подобных патчей) - следующий уровень после школоты, которая создает что угодно в темах [...] Help, причем по каждой мелочи, которая не только в мануалах четко описана, но и интуитивно понятна обычному "с нормальным умом" человеку.

Code
You haven't enough money

Да и с английским не все удачно, любому человеку свободно разговаривающему на английском будет бросаться кривизна сего увиденного.

Собственно сам "мод" то будет полезен полностью безнадежным админам, которые даже не способны сами написать для себя подобное.
Сообщение # 7 отредактировано Givemesmoke - Понедельник, 23.04.2012, 22:39
keonji
I ♥ S-PB
Quote (rsa)
е-мае, как же давно это было... потому как 5 лет назад функция уже была. в мангосах версий 4ххх.


я тогда многого не знал и поиск по всему коду ничего не дал
Сообщение # 8 написано 27.04.2012 в 10:06
AlO
Маршал
а по мне так патч даже немного полезен, на серверах с донатом, изменить цены на свои, к примеру за медальки какие-нибудь, которые выдаются только за донат и все)
Сообщение # 9 написано 28.05.2012 в 18:54
  • Страница 1 из 1
  • 1
Поиск: