C++ Script umschreiben?

Guten Abend leute,

habe folgendes Problem und zwar wurde auf einer anderen Seite ein geschenk Npc released bei welchem man Codes gegen Items Tauschen kann sozusagen.

Problem ist nur das man das Item welches es für den Code gibt bereits in dem C++ Code festlegen muss.

Hier wäre es doch besser das ganze in der Db festzulegen ( Tabellen aufbau lässt auch darauf schließen das es mal so gedacht war) Tabellen Spalten: Code | Used | ID

Da ich nicht so bewandert in C++ bin wollte ich nun fragen ob mir das jemand villeicht dementsprechen umschreiben könnte.

[CODE]/*

made by Hanfer

for IDK? god? education? your mom? this guy from wow studio?

*/

#include “ScriptPCH.h”

#include

std::string sqlcode;

int used;

int id;

bool gotit = true;

#define ITEM_GIFT 44050 //item id of gift

//the crapy code:

class gift_code_npc : public CreatureScript

{

public:

        gift_code_npc()

        : CreatureScript("gift_code_npc")

    {

    }


    bool OnGossipHello(Player* player, Creature* creature)

    {

                            player->PlayerTalkClass->GetGossipMenu().AddMenuItem(5,"Code eingeben!",GOSSIP_SENDER_MAIN, 10, "", 0, true);

                            player->ADD_GOSSIP_ITEM(0, "Schoenen Tag noch", GOSSIP_SENDER_MAIN, 99);

                            player->PlayerTalkClass->SendGossipMenu(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());

    return true;

    }





    bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action)

    {

            if (sender == GOSSIP_SENDER_MAIN)

            {

            player->PlayerTalkClass->ClearMenus();


                    switch(action)

                    {


                    case 99:

                        player->CLOSE_GOSSIP_MENU();

                        player->GetSession()->SendNotification("Schoenen Tag noch.");

                    break;



                    }

                }


    return true;

    }



    bool OnGossipSelectCode(Player* player, Creature* /*creature*/, uint32 sender, uint32 action, const char* code)

    {

        player->PlayerTalkClass->ClearMenus();

        if (sender == GOSSIP_SENDER_MAIN)

        {

            switch (action)

            {

            case 10:


                QueryResult result;


                result = WorldDatabase.Query("SELECT `code`, `used`, `id` FROM `codes`"); //get codes from sql


                if(result)

                {

                    do

                    {


                            Field *fields = result->Fetch();

                            sqlcode = fields[0].GetString();

                            used = fields[1].GetInt32();

                            id = fields[2].GetInt32();


                            if(sqlcode == code){

                                //gotit = false; has to be in if (?!? donno)

                                if(used == 0)

                                {

                                    gotit = false;

                                    QueryResult exec;

                                    exec = WorldDatabase.PQuery("UPDATE codes SET used = '1' WHERE id = %u", id); //set code to used

                                    player->AddItem(ITEM_GIFT, 1);                                                //get your present

                                    player->GetSession()->SendNotification("Glückwunsch!");

                                    player->CLOSE_GOSSIP_MENU();


                                }else{

                                    gotit = false;

                                    player->GetSession()->SendNotification("dieser Code wurde schon eingeloest!");//ha! got you! don't use it twice!

                                    player->CLOSE_GOSSIP_MENU();


                                }


                            }


                    } while (result->NextRow());

                    if(gotit){

                        player->GetSession()->SendNotification("Code nicht gefunden!");                            //Are you kidding me?

                        player->CLOSE_GOSSIP_MENU();                                                               // Sometimes i want to punch people over TCP!

                    }


                    return true;


                }




                player->CLOSE_GOSSIP_MENU();


                return true;

            }

        }


        return false;

    }

};

void AddSC_gift_code_npc()

{

    new gift_code_npc();

}

[/CODE]

Hoffde da kann jemand Helfen.

Mfg. Leso

Bin mir nicht sicher, konnte es nicht testen, aber versuchs mal so:


/*

made by Hanfer

for IDK? god? education? your mom? this guy from wow studio?

*/


#include "ScriptPCH.h"

#include <cstring>


std::string sqlcode;

int used;

int id;


int geschenkID;							//Die ID für das Geschenk welches aus der DB geholt wird


bool gotit = true;


#define ITEM_GIFT 44050 //item id of gift



//the crapy code:

class gift_code_npc : public CreatureScript

{

public:

            gift_code_npc()

            : CreatureScript("gift_code_npc")

        {

        }


        bool OnGossipHello(Player* player, Creature* creature)

        {

                                player->PlayerTalkClass->GetGossipMenu().AddMenuItem(5,"Code eingeben!",GOSSIP_SENDER_MAIN, 10, "", 0, true);

                                player->ADD_GOSSIP_ITEM(0, "Schoenen Tag noch", GOSSIP_SENDER_MAIN, 99);

                                player->PlayerTalkClass->SendGossipMenu(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID());

        return true;

        }





        bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action)

        {

                if (sender == GOSSIP_SENDER_MAIN)

                {

                player->PlayerTalkClass->ClearMenus();


                        switch(action)

                        {


                        case 99:

                            player->CLOSE_GOSSIP_MENU();

                            player->GetSession()->SendNotification("Schoenen Tag noch.");

                        break;



                        }

                    }


        return true;

        }



        bool OnGossipSelectCode(Player* player, Creature* /*creature*/, uint32 sender, uint32 action, const char* code)

        {

            player->PlayerTalkClass->ClearMenus();

            if (sender == GOSSIP_SENDER_MAIN)

            {

                switch (action)

                {

                case 10:


                    QueryResult result;


					QueryResult itemResult;


                    result = WorldDatabase.Query("SELECT `code`, `used`, `id` FROM `codes`"); //get codes from sql

					itemResult = WorldDatabase.Query("SELECT `id` FROM  `geschenkitem`");	//Tabelle geschenkitem anlegen und dort eine Spalte ID mit einem Eintrag: Dem geschenk


                    if(result)

                    {

                        do

                        {


                                Field *fields = result->Fetch();

                                sqlcode = fields[0].GetString();

                                used = fields[1].GetInt32();

                                id = fields[2].GetInt32();


								Field* itemField = itemResult->Fetch();

								geschenkID = fields[0].GetInt32();


                                if(sqlcode == code){

                                    //gotit = false; has to be in if (?!? donno)

                                    if(used == 0)

                                    {

                                        gotit = false;

                                        QueryResult exec;

                                        exec = WorldDatabase.PQuery("UPDATE codes SET used = '1' WHERE id = %u", id); //set code to used

                                        player->AddItem(geschenkID, 1);                                                //get your present

                                        player->GetSession()->SendNotification("Glückwunsch!");

                                        player->CLOSE_GOSSIP_MENU();


                                    }else{

                                        gotit = false;

                                        player->GetSession()->SendNotification("dieser Code wurde schon eingeloest!");//ha! got you! don't use it twice!

                                        player->CLOSE_GOSSIP_MENU();


                                    }


                                }


                        } while (result->NextRow());

                        if(gotit){

                            player->GetSession()->SendNotification("Code nicht gefunden!");                            //Are you kidding me?

                            player->CLOSE_GOSSIP_MENU();                                                               // Sometimes i want to punch people over TCP!

                        }


                        return true;


                    }




                    player->CLOSE_GOSSIP_MENU();


                    return true;

                }

            }


            return false;

        }



};


void AddSC_gift_code_npc()

{

        new gift_code_npc();

}

Du musst dann eben eine neue Datenbanktabelle anlegen, hab ich aber in einem Kommentar vermerkt.

(Falls es fehler gibt, schreib sie einfach, konnte es wie gesagt nicht testen.)

google mal nach code box npc irgendwo liegt noch eins für trinity rum allerdings im alten format.

Danke erstmal an euch beide ^^

Der Umgeschriebene Code funktioniert leider garnicht da er mir dann einfahc imemr sagt das meine tasche voll wäre was sie aber nich is

Immerhin.

Ich schau nachher mal dass ich es testen und debuggen kann. /emoticons/default_smile.png

Wäre echt Nice ^^

hast du Icq oder Skype?

Sowohl als auch.

ICQ wäre 262 192 421