|
Архив - только для чтения |
Модератор форума: andycrowz |
Форум » Корзина форума » Корзина » XP Giver (не дописал) |
XP Giver |
В общем скрипт не работает. Не правильно сделана проверка лвл и выдача XP.
Кто может поправьте и скиньте сюда. Code /* ScriptData SDName: xp_giver SD%Complete: 90% SDComment: Give XP for Gold SDCategory: NPC SDAuthor: keonji SDEditor: KiritoSS EndScriptData */ #include "precompiled.h" bool GossipHello_xp_giver(Player* pPlayer, Creature* pCreature) { if (pPlayer->GetTeam() == ALLIANCE) { pPlayer->ADD_GOSSIP_ITEM( 9, "1,000 XP [1 gold]" , GOSSIP_SENDER_MAIN, 1000); pPlayer->ADD_GOSSIP_ITEM( 9, "10,000 XP [10 gold]" , GOSSIP_SENDER_MAIN, 2000); pPlayer->ADD_GOSSIP_ITEM( 9, "100,000 XP [100 gold]" , GOSSIP_SENDER_MAIN, 3000); pPlayer->ADD_GOSSIP_ITEM( 9, "500,000 XP [500 gold]" , GOSSIP_SENDER_MAIN, 4000); pPlayer->ADD_GOSSIP_ITEM( 9, "1,000,000 XP [1000 gold]" , GOSSIP_SENDER_MAIN, 5000); pPlayer->ADD_GOSSIP_ITEM( 9, "5,000,000 XP [5000 gold]" , GOSSIP_SENDER_MAIN, 6000); } else { pPlayer->ADD_GOSSIP_ITEM( 9, "1,000 XP [1 gold]" , GOSSIP_SENDER_MAIN, 1000); pPlayer->ADD_GOSSIP_ITEM( 9, "10,000 XP [10 gold]" , GOSSIP_SENDER_MAIN, 2000); pPlayer->ADD_GOSSIP_ITEM( 9, "100,000 XP [100 gold]" , GOSSIP_SENDER_MAIN, 3000); pPlayer->ADD_GOSSIP_ITEM( 9, "500,000 XP [500 gold]" , GOSSIP_SENDER_MAIN, 4000); pPlayer->ADD_GOSSIP_ITEM( 9, "1,000,000 XP [1000 gold]" , GOSSIP_SENDER_MAIN, 5000); pPlayer->ADD_GOSSIP_ITEM( 9, "5,000,000 XP [5000 gold]" , GOSSIP_SENDER_MAIN, 6000); } pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,pCreature->GetGUID()); return true; } void SendDefaultMenu_xp_giver(Player* pPlayer, Creature* pCreature, uint32 uiAction) { //Combat Check if (pPlayer->isInCombat()) { pPlayer->CLOSE_GOSSIP_MENU(); pCreature->MonsterWhisper("You are in combat!", pPlayer, NULL); return; } //Money Check if (pPlayer->GetMoney() <0) { pPlayer->CLOSE_GOSSIP_MENU(); pCreature->MonsterWhisper("You don't have enough money.", pPlayer, false); return; } //LVL Check if (pPlayer->GetLevel() >= 80) { pPlayer->CLOSE_GOSSIP_MENU(); pCreature->MonsterWhisper("You are already level 80!", pPlayer, false); return; } switch(uiAction) { case 1000: //1,000 XP { pPlayer->ModifyXPValue(+1000); pPlayer->ModifyMoney(-10000); pPlayer->CLOSE_GOSSIP_MENU(); } break; case 2000: //10,000 XP { pPlayer->ModifyXPValue(+10000); pPlayer->ModifyMoney(-100000); pPlayer->CLOSE_GOSSIP_MENU(); } break; case 3000: //100,000 XP { pPlayer->ModifyXPValue(+100000); pPlayer->ModifyMoney(-1000000); pPlayer->CLOSE_GOSSIP_MENU(); } break; case 4000: //500,000 XP { pPlayer->ModifyXPValue(+500000); pPlayer->ModifyMoney(-5000000); pPlayer->CLOSE_GOSSIP_MENU(); } break; case 5000: //1,000,000 XP { pPlayer->ModifyXPValue(+1000000); pPlayer->ModifyMoney(-1000000); pPlayer->CLOSE_GOSSIP_MENU(); } break; case 6000: //5,000,000 XP { pPlayer->ModifyXPValue(+5000000); pPlayer->ModifyMoney(-50000000); pPlayer->CLOSE_GOSSIP_MENU(); } break; pPlayer->CLOSE_GOSSIP_MENU(); } } bool GossipSelect_xp_giver(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) { // Main menu if (uiSender == GOSSIP_SENDER_MAIN) SendDefaultMenu_xp_giver(pPlayer, pCreature, uiAction); return true; } void AddSC_xp_giver() { Script *newscript; newscript = new Script; newscript->Name = "xp_giver"; newscript->pGossipHello = &GossipHello_xp_giver; newscript->pGossipSelect = &GossipSelect_xp_giver; newscript->RegisterSelf(); }
Сообщение # 1 написано 16.01.2011 в 21:12
|
XP giver (test)
тестируйте) Прикрепления:
xp_giver_mangos.sql
(2.1 Kb)
·
xp_giver_script.sql
(1.6 Kb)
Сообщение # 2 написано 16.01.2011 в 23:23
|
lanc, З.Ы.
Немного не правильно было, вот чуть-чуть переделанный вариант: Code /* Copyright (C) 2006 - 2010 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: xp_giver SD%Complete: SDComment: Give XP for Gold SDCategory: NPC SDAuthor: orginal author: KiritoSS, keonji, restore work lanc <img src="http://s8.ucoz.net/sm/1/wink.gif" border="0" align="absmiddle" alt="wink"> EndScriptData */ #include "precompiled.h" #include "sc_creature.h" #include "sc_gossip.h" long long int gold; int costgold; enum { SAY_COMBAT = -1960200, SAY_NOMONEY = -1960201, SAY_FAILLEVEL = -1960202, GOSSIP_XP01 = -3000060, GOSSIP_XP02 = -3000061, GOSSIP_XP03 = -3000062, GOSSIP_XP04 = -3000063, GOSSIP_XP05 = -3000064, GOSSIP_XP06 = -3000065, GOSSIP_MENU_XP_GIVER = 11001, }; bool GossipHello_xp_giver(Player* pPlayer, Creature* pCreature) { pPlayer->ADD_GOSSIP_ITEM_ID(GOSSIP_ICON_CHAT, GOSSIP_XP01, GOSSIP_SENDER_MAIN, 1000); pPlayer->ADD_GOSSIP_ITEM_ID(GOSSIP_ICON_CHAT, GOSSIP_XP02, GOSSIP_SENDER_MAIN, 1001); pPlayer->ADD_GOSSIP_ITEM_ID(GOSSIP_ICON_CHAT, GOSSIP_XP03, GOSSIP_SENDER_MAIN, 1002); pPlayer->ADD_GOSSIP_ITEM_ID(GOSSIP_ICON_CHAT, GOSSIP_XP04, GOSSIP_SENDER_MAIN, 1003); pPlayer->ADD_GOSSIP_ITEM_ID(GOSSIP_ICON_CHAT, GOSSIP_XP05, GOSSIP_SENDER_MAIN, 1004); pPlayer->ADD_GOSSIP_ITEM_ID(GOSSIP_ICON_CHAT, GOSSIP_XP06, GOSSIP_SENDER_MAIN, 1005); pPlayer->SEND_GOSSIP_MENU(GOSSIP_MENU_XP_GIVER, pCreature->GetGUID()); return true; } void SendDefaultMenu_xp_giver(Player* pPlayer, Creature* m_creature, uint32 uiAction) { if (!pPlayer->getAttackers().empty()) { pPlayer->CLOSE_GOSSIP_MENU(); DoScriptText(SAY_COMBAT, m_creature); return; } gold = pPlayer->GetMoney(); costgold = 10000; if (gold < costgold) { pPlayer->CLOSE_GOSSIP_MENU(); DoScriptText(SAY_NOMONEY, m_creature); return; } if (pPlayer->getLevel() >= 80) { pPlayer->CLOSE_GOSSIP_MENU(); DoScriptText(SAY_FAILLEVEL, m_creature); return; } switch(uiAction) { case 1000: pPlayer->ModifyXPValue(+1000); pPlayer->ModifyMoney(-1*costgold); pPlayer->CLOSE_GOSSIP_MENU(); break; case 1001: pPlayer->ModifyXPValue(+10000); pPlayer->ModifyMoney(-10*costgold); pPlayer->CLOSE_GOSSIP_MENU(); break; case 1002: pPlayer->ModifyXPValue(+100000); pPlayer->ModifyMoney(-100*costgold); pPlayer->CLOSE_GOSSIP_MENU(); break; case 1003: pPlayer->ModifyXPValue(+500000); pPlayer->ModifyMoney(-5000*costgold); pPlayer->CLOSE_GOSSIP_MENU(); break; case 1004: pPlayer->ModifyXPValue(+1000000); pPlayer->ModifyMoney(-10000*costgold); pPlayer->CLOSE_GOSSIP_MENU(); break; case 1005: pPlayer->ModifyXPValue(+5000000); pPlayer->ModifyMoney(-50000*costgold); pPlayer->CLOSE_GOSSIP_MENU(); break; } pPlayer->CLOSE_GOSSIP_MENU(); } bool GossipSelect_xp_giver(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) { // Main menu if (uiSender == GOSSIP_SENDER_MAIN) SendDefaultMenu_xp_giver(pPlayer, pCreature, uiAction); return true; } void AddSC_xp_giver() { Script* pNewScript; pNewScript = new Script; pNewScript->Name = "xp_giver"; pNewScript->pGossipHello = &GossipHello_xp_giver; pNewScript->pGossipSelect = &GossipSelect_xp_giver; pNewScript->RegisterSelf(); }
Сообщение # 4 написано 17.01.2011 в 15:30
|
Quote (keonji) Немного не правильно было, вот чуть-чуть переделанный вариант: чем же он отличается от моего варианта? Code - if (pPlayer->getLevel() > 80) && (pPlayer->getLevel() = 80) +if (pPlayer->getLevel() >= 80) получите warning'и в компиляторе только, а сути условия оно не изменит, можна и так и так... проверка на левел = 80 вабще не нужна, > 80 вполне достаточно, на 80 уровне чару уже опыт не нужен!
Quote (keonji) error C2039: ModifyXPValue: не является членом "Player" нету) хоть вариант переписан из тринити я там тоже нечего подобного не видел Code void Player::ModifyXPValue( int32 value ) { if(value < 0) { if (GetXPForLevel() > sWorld.getConfig(CONFIG_FLOAT_RATE_XP_KILL)) SetUInt32Value(PLAYER_NEXT_LEVEL_XP, sWorld.getConfig(CONFIG_FLOAT_RATE_XP_KILL) + value); else SetUInt32Value(PLAYER_NEXT_LEVEL_XP, GetXPForLevel() > uint32(-value) ? GetXPForLevel() + value : 0); } else SetUInt32Value(PLAYER_NEXT_LEVEL_XP, GetXPForLevel() < sWorld.getConfig(CONFIG_FLOAT_RATE_XP_KILL) - value ? GetXPForLevel() + value : sWorld.getConfig(CONFIG_FLOAT_RATE_XP_KILL)); } в Player и обьявить ее |
lanc,
Quote (lanc) получите warning'и в компиляторе только, а сути условия оно не изменит, можна и так и так... У меня ерроры были из-зы этого (На отсутствие ; ругался в тех местах, где она не нужна.) Quote (lanc) возможно нужно добавить чтото вроде вот такой функции Я тоже об этом подумывал. Можно её даже custom командой сделать. Если к примеру не нужно добавлять лвл, а некоторое количество XP
Сообщение # 6 написано 17.01.2011 в 16:19
|
Данная тема была перемещена из раздела Патчи в ядро MaNGOS.
Причина перемещения: устарело Переместил: ph3n.
Сообщение # 10 написано 15.10.2012 в 16:37
|
| |||
| |||