Üdv mindenkinek!
Segítségetekre lenne szükségem!
Hogyan tudnám megoldani scriptel hogy adatbázisba ahova rögzíti donation pontot azt egy npc-vel le olvassa írja hogy pontosan mennyi van, illetve át tudná váltani egy tokenre.
Ezt úgy gondolom 2 menü volna.
Az első menü pontban tudná leolvasni pontosan mennyi DP-ja van
A második menü pontban meg át tudná váltani DP->Token-re (Pl 1DP->1token) Token mint BOJ-ra gondoltam
Előre is köszönöm válaszotok.
Amit írtam hozzá szólást vegyük a script 2. részének
Első része ami már kész 4 menü van token váltósba Token->lvl Token->gold stb lényegtelen
Most már kibővítettem első hozzászólásom 2. menü pontjával viszont azt hogy tudnám megadni hogy az adott player tudja csak név alapján használni és le olvasni?
2. Tábla úgy néz ki 1. field username 2. kredit (DP)
Username táblában account vagy karakter neve van?
Account név, tehát accounton belül amik vannak karakterek bármelyikével van benn le tudja olvasni és felhasználni pontokat.
táblát írd át melyik táblában van, a táblát pedig auth adatbázisba rakd
(másik: username-be nem account nevet kell írnod hanem id-jét.)
class npc_asd : public CreatureScript
{
public:
npc_asd() : CreatureScript("npc_asd") { }
bool OnGossipSelect(Player *pPlayer, Creature *pCreature, uint32 sender, uint32 action )
{
if(!pPlayer || !pCreature || !action)
return false;
Field *fields;
uint32 ID;
QueryResult result;
switch(action)
{
case GOSSIP_ACTION_INFO_DEF+1:
result = AuthDatabase.PQuery("SELECT `kredit` FROM `tábla` WHERE `username` = '%u' LIMIT 1", pPlayer->GetSession()->GetAccountId());
if (result)
{
fields = result->Fetch();
uint32 dp = fields[0].GetUInt32();
pCreature->MonsterWhisper("Jelenleg %u dp-d van!", dp, pPlayer->GetGUID());
}
else
pCreature->MonsterWhisper("Nincs dp-d!", pPlayer->GetGUID());
pPlayer->CLOSE_GOSSIP_MENU();
break;
}
return true;
}
bool OnGossipHello(Player *pPlayer, Creature *pCreature)
{
pPlayer->ADD_GOSSIP_ITEM(0, "Mennyi a pontom?", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(1, pCreature->GetGUID());
return true;
}
};
void AddSC_npc_asd()
{
new npc_asd();
}
Meg szerkesztettem de hibás, simán is fordítottam úgy se jó :(
Különbözik valószínűleg a verzió
http://pastebin.com/rYhXUs3M Ez a sima működő változat amit még nem szerkesztettem meg.
Azért írtam logon-ra az adatbázist mert itt nem auth van (2.4.3oregon)
Ez a script volna az alany amibe bele kellene építeni, valószínűleg az lehet a probléma
És akkor úgy fogom megoldani hogy account táblába beszúrok kredit mezőt akkor nem kell + tábla
mi a hiba? mire dob hibát?
Idézetet írta: Redbull Dátum 2013 március 06, 04:32:15 DÉLUTÁN
És akkor úgy fogom megoldani hogy account táblába beszúrok kredit mezőt akkor nem kell + tábla
Nem javallott táblát módosítani. Szerintem az eredeti elképzelés tökéletes kérdés, hogy milyen hibát dob rá...
src\scripts\Custom\npc_asd.cpp(2): error C2504: 'CreatureScript' : base class undefined
src\scripts\Custom\npc_asd.cpp(4): error C2614: 'npc_asd' : illegal member initialization: 'CreatureScript' is not a base or member
src\scripts\Custom\npc_asd.cpp(18): error C2065: 'LogonDatabase' : undeclared identifier
src\scripts\Custom\npc_asd.cpp(18): error C2228: left of '.PQuery' must have class/struct/union
3> type is ''unknown-type''
src\scripts\Custom\npc_asd.cpp(19): error C2451: conditional expression of type 'QueryResult' is illegal
3> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
src\scripts\Custom\npc_asd.cpp(21): error C2819: type 'QueryResult' does not have an overloaded member 'operator ->'
src/shared/Database\QueryResult.h(35) : see declaration of 'QueryResult'
3> did you intend to use '.' instead?
src\scripts\Custom\npc_asd.cpp(21): error C2232: '->QueryResult::Fetch' : left operand has 'class' type, use '.'
4> ScriptLoader.cpp
4> game.vcxproj -> C:\Build\src\game\Release\game.lib
5>------ Build started: Project: oregon-core, Configuration: Release Win32 ------
5> Creating library C:/Build/src/oregoncore/Release/oregon-core.lib and object C:/Build/src/oregoncore/Release/oregon-core.exp
5>game.lib(ScriptLoader.obj) : error LNK2019: unresolved external symbol "void __cdecl AddSC_npc_asd(void)" (?AddSC_npc_asd@@YAXXZ) referenced in function "void __cdecl AddScripts(void)" (?AddScripts@@YAXXZ)
és külön raktad be a kettőt? ha nem megy este fele egybeírom
Igen
Azt nagyon meg köszönném! :)
Ezt próbáld meg:
http://pastebin.com/yKLrqbAC
Valszeg a QueryResult osztállyal még gondban lesz de ez már az általad használt emu scriptrendszerére van írva.
3>..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(12): error C2065: 'action' : undeclared identifier
3>..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(17): error C2512: 'QueryResult' : no appropriate default constructor available
3>..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(19): error C2065: 'action' : undeclared identifier
3>..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(19): error C2050: switch expression not integral
3>..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(22): error C2065: 'LogonDatabase' : undeclared identifier
3>..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(22): error C2228: left of '.PQuery' must have class/struct/union
3> type is ''unknown-type''
3>..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(23): error C2451: conditional expression of type 'QueryResult' is illegal
3> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
3>..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(25): error C2819: type 'QueryResult' does not have an overloaded member 'operator ->'
3> C:/joemu/src/shared/Database\QueryResult.h(35) : see declaration of 'QueryResult'
3> did you intend to use '.' instead?
3>..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(25): error C2232: '->QueryResult::Fetch' : left operand has 'class' type, use '.'
4>------ Build started: Project: oregon-core, Configuration: Release Win32 ------
4> Creating library C:/Build/src/oregoncore/Release/oregon-core.lib and object C:/Build/src/oregoncore/Release/oregon-core.exp
4>game.lib(ScriptLoader.obj) : error LNK2019: unresolved external symbol "void __cdecl AddSC_npc_dp(void)" (?AddSC_npc_dp@@YAXXZ) referenced in function "void __cdecl AddScripts(void)" (?AddScripts@@YAXXZ)
4>C:\Build\bin\Release\oregon-core.exe : fatal error LNK1120: 1 unresolved externals
Próbáld ki:
http://pastebin.com/vYiS9HZv
3>..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(15): error C2065: 'action' : undeclared identifier
3>..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(22): error C2065: 'action' : undeclared identifier
3>..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(22): error C2050: switch expression not integral
3>..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(50): fatal error C1075: end of file found before the left brace '{' at '..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(43)' was matched
4>game.lib(ScriptLoader.obj) : error LNK2019: unresolved external symbol "void __cdecl AddSC_npc_dp(void)" (?AddSC_npc_dp@@YAXXZ) referenced in function "void __cdecl AddScripts(void)" (?AddScripts@@YAXXZ)
http://pastebin.com/mBwx12dH
UiActionra írtam úgy is jó volt.
..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(19): warning C4101: 'ID' : unreferenced local variable
http://pastebin.com/uEvcQgz1
4>scripts.lib(npc_dp.obj) : error LNK2019: unresolved external symbol "class Database LogonDatabase" (?LogonDatabase@@3VDatabase@@A) referenced in function "bool __cdecl GossipSelect_npc_dp(class Player *,class Creature *,unsigned int,unsigned int)" (?GossipSelect_npc_dp@@YA_NPAVPlayer@@PAVCreature@@II@Z)
4>C:\Build\bin\Release\oregon-core.exe : fatal error LNK1120: 1 unresolved externals
Meg van, közbe megoldódott
Login helyett Logon volt :D
Köszönöm a segítséged!
Now good :)
Viszont hiába adok neki értéket (kreditet) mindig azt írja nincsen.
másold be egész kódot
#include "ScriptPCH.h"
#include <cstring>
extern DatabaseType LoginDatabase;
bool GossipHello_npc_dp(Player* pPlayer, Creature* pCreature)
{
pPlayer->ADD_GOSSIP_ITEM(0, "Mennyi a pontom?", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(1, pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_dp(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 action)
{
if(!pPlayer || !pCreature || !action)
return false;
Field *fields;
QueryResult_AutoPtr result;
switch(action)
{
case GOSSIP_ACTION_INFO_DEF+1:
result = LoginDatabase.PQuery("SELECT `dp` FROM `kredit` WHERE `username` = '%u' LIMIT 1", pPlayer->GetSession()->GetAccountId());
if (result)
{
fields = result->Fetch();
uint32 dp = fields[0].GetUInt32();
pCreature->MonsterWhisper("Jelenleg %u dp-d van!", dp, pPlayer->GetGUID());
}
else
pCreature->MonsterWhisper("Nincs dp-d!", pPlayer->GetGUID());
pPlayer->CLOSE_GOSSIP_MENU();
break;
}
return true;
}
void AddSC_npc_dp()
{
Script *newscript;
newscript = new Script;
newscript->Name = "npc_dp";
newscript->pGossipHello = &GossipHello_npc_dp;
newscript->pGossipSelect = &GossipSelect_npc_dp;
newscript->RegisterSelf();
}
result = LoginDatabase.PQuery("SELECT `dp` FROM `kredit` WHERE `username` = '%u' LIMIT 1", pPlayer->GetSession()->GetAccountId());
Felhasználónévnek biztosan az account id-t akartad megadni?
Ezenkívül ezt a sort:
pPlayer->ADD_GOSSIP_ITEM(0, "Mennyi a pontom?", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
Átírnám erre:
pPlayer->ADD_GOSSIP_ITEM(0, "Mennyi a pontom?", GOSSIP_SENDER_MAIN, 0);
(nem tudom hol van definiálva a GOSSIP_ACTION_INFO_DEF)
Ezt:
case GOSSIP_ACTION_INFO_DEF+1:
Erre:
case 0:
Végül ezt:
if(!pPlayer || !pCreature || !action)
Erre:
if(!pPlayer || !pCreature)
Nem, nem account id alapján szerettem volna. De ezt még írtam az elején, de az a lényeg megoldódik :)