Informatikai Barkács Fórum

WORLD OF WARCRAFT SZERVER => Script => A témát indította: Redbull Dátum 2013 március 04, 11:33:49 DÉLUTÁN

Cím: DP script
Írta: Redbull Dátum 2013 március 04, 11:33:49 DÉLUTÁN
Ü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.
Cím: Re:DP script
Írta: Redbull Dátum 2013 március 06, 03:53:17 DÉLELŐTT
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)
Cím: Re:DP script
Írta: IrOn Dátum 2013 március 06, 06:58:38 DÉLELŐTT
Username táblában account vagy karakter neve van?
Cím: Re:DP script
Írta: Redbull Dátum 2013 március 06, 09:25:10 DÉLELŐTT
Account név, tehát accounton belül amik vannak karakterek bármelyikével van benn le tudja olvasni és felhasználni  pontokat.
Cím: Re:DP script
Írta: IrOn Dátum 2013 március 06, 02:42:23 DÉLUTÁN
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();
}
Cím: Re:DP script
Írta: Redbull Dátum 2013 március 06, 04:32:15 DÉLUTÁN
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
Cím: Re:DP script
Írta: IrOn Dátum 2013 március 06, 05:17:22 DÉLUTÁN
mi a hiba? mire dob hibát?
Cím: Re:DP script
Írta: EroniX Dátum 2013 március 06, 05:34:43 DÉLUTÁN
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á...
Cím: Re:DP script
Írta: Redbull Dátum 2013 március 06, 06:11:21 DÉLUTÁN
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)
Cím: Re:DP script
Írta: IrOn Dátum 2013 március 06, 06:15:15 DÉLUTÁN
és külön raktad be a kettőt? ha nem megy este fele egybeírom
Cím: Re:DP script
Írta: Redbull Dátum 2013 március 06, 06:18:27 DÉLUTÁN
Igen
Azt nagyon meg köszönném! :)
Cím: Re:DP script
Írta: EroniX Dátum 2013 március 06, 06:25:38 DÉLUTÁN
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.
Cím: Re:DP script
Írta: Redbull Dátum 2013 március 06, 06:35:05 DÉLUTÁN
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
Cím: Re:DP script
Írta: EroniX Dátum 2013 március 06, 06:44:37 DÉLUTÁN
Próbáld ki:
http://pastebin.com/vYiS9HZv
Cím: Re:DP script
Írta: Redbull Dátum 2013 március 06, 06:48:37 DÉLUTÁN
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)

Cím: Re:DP script
Írta: EroniX Dátum 2013 március 06, 06:57:22 DÉLUTÁN
http://pastebin.com/mBwx12dH
Cím: Re:DP script
Írta: Redbull Dátum 2013 március 06, 07:04:39 DÉLUTÁN
UiActionra írtam úgy is jó volt.

..\..\..\joemu\src\scripts\Custom\npc_dp.cpp(19): warning C4101: 'ID' : unreferenced local variable
Cím: Re:DP script
Írta: EroniX Dátum 2013 március 06, 07:19:19 DÉLUTÁN
http://pastebin.com/uEvcQgz1
Cím: Re:DP script
Írta: Redbull Dátum 2013 március 06, 07:28:58 DÉLUTÁN
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
Cím: Re:DP script
Írta: Redbull Dátum 2013 március 06, 07:41:20 DÉLUTÁN
Meg van, közbe megoldódott
Login helyett Logon volt :D
Köszönöm a segítséged!
Now good :)
Cím: Re:DP script
Írta: Redbull Dátum 2013 március 06, 07:55:47 DÉLUTÁN
Viszont hiába adok neki értéket (kreditet) mindig azt írja nincsen.
Cím: Re:DP script
Írta: IrOn Dátum 2013 március 06, 09:05:34 DÉLUTÁN
másold be egész kódot
Cím: Re:DP script
Írta: Redbull Dátum 2013 március 06, 09:22:30 DÉLUTÁN
    #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();
    }
Cím: Re:DP script
Írta: EroniX Dátum 2013 március 06, 09:50:00 DÉLUTÁN

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)
Cím: Re:DP script
Írta: Redbull Dátum 2013 március 06, 10:26:57 DÉLUTÁN
Nem, nem account id alapján szerettem volna. De ezt még írtam az elején, de az a lényeg megoldódik :)