Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Патчи (http://mangos.ytdb.ru/forumdisplay.php?f=55)
-   -   [MoD] XP Trader (http://mangos.ytdb.ru/showthread.php?t=5381)

staf0rd 23.04.2012 19:47

[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++

tempura 24.04.2012 07:23

Ой, какой код знакомый! Где-то я его уже видел... :)

KiriX 25.04.2012 09:34

Имея два голда - можем покупать 100000 опыта...

staf0rd 27.04.2012 09:42

"Ой, какой код знакомый! Где-то я его уже видел... :)"
wowjp, не? код сначала я выложил туда
"Имея два голда - можем покупать 100000 опыта..."
цену всегда можно поменять

Evgeniy 27.04.2012 10:37

Код:

  costo = 20000;

    if (money < costo )
    {

дальше проверки не видно

KiriX 30.04.2012 23:21

Цитата:

Сообщение от Evgeniy (Сообщение 27093)
Код:

  costo = 20000;

    if (money < costo )
    {

дальше проверки не видно

Я бы сказал, что проверка не там где надо используется. Ну или не так, как надо - в любом случае - дыра =)

tempura 01.05.2012 01:18

Цитата:

Сообщение от staf0rd (Сообщение 27092)
"Ой, какой код знакомый! Где-то я его уже видел... :)"
wowjp, не? код сначала я выложил туда

Ага - где я, и где вов*опа...

А то я не узнаю код написанный на Ру-Мангос... :)

Просто посмотрите как подобные же примеры сделаны.

Видите ли, молодой человек... Мало просто спереть вот этот кусок из перевыложенных тысячи раз на куче форумов наших скриптов:
Код:

if (money < costo )
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("Недостаточно денег", LANG_UNIVERSAL, NULL);
return;
}

Там надо еще смотреть что выше и что ниже понаписано.

Так что, наверное, стоило бы не только себя в авторы вписать, но еще и "Russian MaNGOS Community". :)
Вот только не раньше, чем проверка встанет в нужное место :)

staf0rd 01.05.2012 16:01

Цитата:

Сообщение от tempura (Сообщение 27115)
Ага - где я, и где вов*опа...

А то я не узнаю код написанный на Ру-Мангос... :)

Просто посмотрите как подобные же примеры сделаны.

Видите ли, молодой человек... Мало просто спереть вот этот кусок из перевыложенных тысячи раз на куче форумов наших скриптов:
Код:

if (money < costo )
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("Недостаточно денег", LANG_UNIVERSAL, NULL);
return;
}

Там надо еще смотреть что выше и что ниже понаписано.

Так что, наверное, стоило бы не только себя в авторы вписать, но еще и "Russian MaNGOS Community". :)
Вот только не раньше, чем проверка встанет в нужное место :)

я тут не лазал, не надо гнать
p.s. я c++ знаю на 0

StinK 01.05.2012 18:46

Цитата:

Сообщение от staf0rd (Сообщение 27118)
я c++ знаю на 0

И какого, извините, фига здесь делает данная запись?
Цитата:

Решил попробовать написать продавца опыта

lovepsone 01.05.2012 19:43


staf0rd 02.05.2012 17:02

Удалите тему тогда, раз не надо никому

tempura 02.05.2012 22:20

Цитата:

Сообщение от staf0rd (Сообщение 27126)
Удалите тему тогда, раз не надо никому

А ты еще поучи, чем нам тут заниматься. Уж поверь, без тебя решим что и когда удалять. Особенно рекомендую снова и снова перечитать Правила Форума, например последний абзац пункта А-6:
Цитата:

Узурпация функций модераторов, как-то: «тему можно закрывать», «переместите в другой раздел», и т.п. заявления. Обычно у модераторов и без того хватает мозгов сообразить, что делать с темами;



Умел код своровать - умей и ответ держать. Если б не хамил "я сам написал" (да еще и авторство в файле свое поставил), а често признался "переделаный мной скрипт Карателя" - и отношение было бы нормальное. Или ты думал что целые куски кода кто-то может не узнать?

Вот из-за таких "модописателей" и идет дурная слава о РуМангос, мол "там одни ка33лыЪ, я написал, а меня г*ном облили" и т.п. заявы. Сопрут здесь же код, поменяют один-два параметра, и говорят "я написал". А была бы совесть написать "я немного переделал скрипт, гляньте кому надо" - был бы другой разговор. Вот только почему-то подобные личности не готовы признаваться в воровстве, им проще обос*ть РуМангос.

staf0rd 03.05.2012 13:23

Да не брал я код отсюда, взял телегая из репо rsa и поизвращался над ним

Taumer 03.05.2012 13:38

А как вы думаете, откуда он там? Да и
Код:

SDComment: by tempura, modify by Asprorpsa
тонко намекает.

rsa 03.05.2012 16:05

Цитата:

Сообщение от staf0rd (Сообщение 27139)
Да не брал я код отсюда, взял телегая из репо rsa и поизвращался над ним

В этом-то вся и разница отношении к коду здесь и на вовж...
в тексте скрипта мы видим:
SDAuthor: staford

текст скрипта (примерно 90%) взят у меня. однако я, несмотря на то, что когда-то переписал этот скрипт из начального варианта более чем на 50%, никакого
SDAuthor: rsa
туда не вставлял. догадайтесь, почему? потому что подгонка (правка, коррекция, етц...) - это не работа, а доработка. она не меняет автора кода.
может теперь все же задумаетесь над отношением (моим в частности, да и тут оно в целом не лучше) к "зборщикам"? вам уже пора переходить из категории "зборщиков" в категорию кодеров, вспомните ланца.


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

ru-mangos.ru - Русское сообщество MaNGOS