Informatikai Barkács Fórum

WORLD OF WARCRAFT SZERVER => Script => A témát indította: rasocsabi Dátum 2014 július 21, 11:37:48 DÉLELŐTT

Cím: Exchanger Npc
Írta: rasocsabi Dátum 2014 július 21, 11:37:48 DÉLELŐTT
Sziasztok találtam a gépemen egy karakter cserélő npc-t és gondoltam megosztom veletek is. Sajnos nem teljesen magyar de nem nagy feladat fordítani.
Ime a script:
#include "ScriptPCH.h"

// 71523 - Searing Weakness - aura (2mins duration)
class npc_exchanger : public CreatureScript
{
public:
        npc_exchanger() : CreatureScript("npc_exchanger") { }

    bool OnGossipHello(Player* player, Creature* creature)
    {
        //player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Elerheto Jatekosok", GOSSIP_SENDER_MAIN, 5);
player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_TALK, "Ird be a jatekos nevet akivel szeretnel cserelni", GOSSIP_SENDER_MAIN, 6, "", 0, true);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT, "Elfogadom, es elcserelem a karakterem", GOSSIP_SENDER_MAIN, 7);
player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_DOT, "Nem szeretnek cserelni!", GOSSIP_SENDER_MAIN, 8, "Do you really want clear records?", 0, false);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Viszlat!", GOSSIP_SENDER_MAIN, 9);

        player->SEND_GOSSIP_MENU(1, creature->GetGUID());

        return true;
    }

    bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action)
    {
        player->PlayerTalkClass->ClearMenus();

if (action > 10)
{
if (Player* target = sObjectAccessor->FindPlayer(action - 10))
{
if (!target->IsInWorld())
                {
creature->MonsterWhisper("Sajnalom, de akivel szeretnel cserelni eppen nem elerheto", player->GetGUID());
CharacterDatabase.PExecute("DELETE FROM `exchange` WHERE `guid` = '%u'", target->GetGUIDLow());
player->CLOSE_GOSSIP_MENU();
                    return true;
}

if (target->isGameMaster())
                {
creature->MonsterWhisper("Sajnalom, de nem tudja kicserelni a karaktert", player->GetGUID());
CharacterDatabase.PExecute("DELETE FROM `exchange` WHERE `guid` = '%u'", target->GetGUIDLow());
player->CLOSE_GOSSIP_MENU();
                    return true;
}

if (player->GetSession()->GetSecurity() <> target->GetSession()->GetSecurity())
{
if (player->GetSession()->GetSecurity() > 0)
{
creature->MonsterWhisper("Sorry, you cannot exchange your VIP character to normal, now deleting the record!", player->GetGUID());
creature->MonsterWhisper("Sorry, you cannot exchange your normal character to VIP, now deleting the record!", target->GetGUID());
}
else
{
creature->MonsterWhisper("Sorry, you cannot exchange your normal character to VIP, now deleting the record!", player->GetGUID());
creature->MonsterWhisper("Sorry, you cannot exchange your VIP character to normal, now deleting the record!", target->GetGUID());
}

CharacterDatabase.PExecute("DELETE FROM `exchange` WHERE `guid` = '%u'", target->GetGUIDLow());
player->CLOSE_GOSSIP_MENU();

target->RemoveAura(71523);

                    return true;
}

if (target->HasAura(71523))
{
creature->MonsterWhisper("Feldolgozas...", player->GetGUID());
creature->MonsterWhisper("Feldolgozas...", target->GetGUID());

player->RemoveAura(71523);
target->RemoveAura(71523);

player->SaveToDB();
target->SaveToDB();

uint32 playerGuid = player->GetGUIDLow();
uint32 targetGuid = target->GetGUIDLow();

uint32 playerAccount = player->GetSession()->GetAccountId();
uint32 targetAccount = target->GetSession()->GetAccountId();

player->GetSession()->KickPlayer();
target->GetSession()->KickPlayer();

CharacterDatabase.PExecute("UPDATE `characters` SET `account` = %u WHERE `guid` = '%u'", targetAccount, playerGuid);
CharacterDatabase.PExecute("UPDATE `characters` SET `account` = %u WHERE `guid` = '%u'", playerAccount, targetGuid);

return true;
}
else
{
creature->MonsterWhisper("A Buffod lejart, most torli a rekordot!", player->GetGUIDLow());
creature->MonsterWhisper("On buffja lejart, valasszunk ismet, most torli a rekordot!", target->GetGUIDLow());
CharacterDatabase.PExecute("DELETE FROM `exchange` WHERE `guid` = '%u'", target->GetGUIDLow());
player->CLOSE_GOSSIP_MENU();
return false;
}
}
else
{
creature->MonsterWhisper("Nem lehet kivalasztani a celt", player->GetGUIDLow());
CharacterDatabase.PExecute("DELETE FROM `exchange` WHERE `targetGuid` = '%u'", player->GetGUIDLow());
player->CLOSE_GOSSIP_MENU();
return false;
}
player->CLOSE_GOSSIP_MENU();
return true;
}

        switch (action)
        {
case 7:
{
            QueryResult result = CharacterDatabase.PQuery("SELECT `guid`, `targetGuid` FROM `exchange` WHERE `targetGuid` = '%u' LIMIT 10", player->GetGUIDLow());
if (result)
{
do
{
if (Player* first = sObjectAccessor->FindPlayer((*result)[0].GetUInt32()))
{
player->ADD_GOSSIP_ITEM_EXTENDED(GOSSIP_ICON_DOT, first->GetName(), GOSSIP_SENDER_MAIN, 10 + first->GetGUIDLow(), "Do you really want exchange?", 0, false);
player->SEND_GOSSIP_MENU(1, creature->GetGUID());
}
else
{
creature->MonsterWhisper("Nem talalom a masik jatekost.", player->GetGUID());

CharacterDatabase.PExecute("DELETE FROM `exchange` WHERE `targetGuid` = '%u'", player->GetGUIDLow());

player->PlayerTalkClass->ClearMenus();
player->CLOSE_GOSSIP_MENU();
}
} while (result->NextRow());
}
else
{
creature->MonsterWhisper("Nincs semmilyen arfolyam rekord!", player->GetGUID());
player->PlayerTalkClass->ClearMenus();
player->CLOSE_GOSSIP_MENU();
}
            break;
}
case 8:
{
creature->MonsterWhisper("Most torolve lesz az osszes rekord!", player->GetGUID());
CharacterDatabase.PExecute("DELETE FROM `exchange` WHERE `guid` = '%u'", player->GetGUIDLow());
CharacterDatabase.PExecute("DELETE FROM `exchange` WHERE `targetGuid` = '%u'", player->GetGUIDLow());

player->RemoveAura(71523);

player->PlayerTalkClass->ClearMenus();
player->CLOSE_GOSSIP_MENU();
break;
}
        case 9:
{
            player->CLOSE_GOSSIP_MENU();
            break;
}
        }
        return true;
    }

bool OnGossipSelectCode(Player* player, Creature* creature, uint32 uiSender, uint32 uiAction, const char* code)
    {
        player->PlayerTalkClass->ClearMenus();
        player->CLOSE_GOSSIP_MENU();

        if (uiSender == GOSSIP_SENDER_MAIN)
        {
            switch (uiAction)
            {
                case 6:
{
                    const char* plrName = code;

                    if (Player* target = sObjectAccessor->FindPlayerByName(plrName))
                    {
if (target == player)
{
creature->MonsterWhisper("Nem lehet el cserelni magad, noob!", player->GetGUID());
creature->CastCustomSpell(player, 6595, 0, 0, 0, true);
return false;
}

                        if (!target->IsInWorld())
                        {
                            creature->MonsterWhisper("Elnezest! A cel jelenleg nem elerheto!", player->GetGUID());
                            return true;
                        }

                        if (target->isGameMaster())
                        {
                            creature->MonsterWhisper("Elnezest! Nem lehet cserelni a GM karaktert", player->GetGUID());
                            return true;
                        }

if (player->GetSession()->GetSecurity() <> target->GetSession()->GetSecurity())
{
if (player->GetSession()->GetSecurity() > 0)
{
creature->MonsterWhisper("Sorry, you cannot exchange your VIP character to normal, now deleting the record!", player->GetGUID());
creature->MonsterWhisper("Sorry, you cannot exchange your normal character to VIP, now deleting the record!", target->GetGUID());
}
else
{
creature->MonsterWhisper("Sorry, you cannot exchange your normal character to VIP, now deleting the record!", player->GetGUID());
creature->MonsterWhisper("Sorry, you cannot exchange your VIP character to normal, now deleting the record!", target->GetGUID());
}

CharacterDatabase.PExecute("DELETE FROM `exchange` WHERE `guid` = '%u'", target->GetGUIDLow());
player->CLOSE_GOSSIP_MENU();

target->RemoveAura(71523);

return true;
}

const char* text = "Hey! %s szeretned el  cserelni a karaktered?";
char buffalow[1024];
sprintf(buffalow, text, player->GetName());

std::string msg(buffalow);

WorldPacket data(SMSG_MESSAGECHAT, 200);

data << (uint8)CHAT_MSG_RAID_BOSS_EMOTE;
data << (uint32)LANG_UNIVERSAL;
data << (uint64)0;
data << (uint32)0;
data << (uint32)1;
data << (uint8)0;
data << (uint64)0;
data << (uint32)(msg.length() + 1);
data << msg.c_str();
data << (uint8)0;

if (target->GetSession())
target->GetSession()->SendPacket(&data);

creature->MonsterWhisper("Ha el szeretned cserelni a karaktered, kerlek, latogass el hozzam!", target->GetGUID());

creature->AddAura(71523, player);

creature->MonsterWhisper("Keres elkuldve, most torli az osszes regebbi rekordot!", player->GetGUID());
CharacterDatabase.PExecute("DELETE FROM `exchange` WHERE `guid` = '%u'", player->GetGUIDLow());
CharacterDatabase.PExecute("DELETE FROM `exchange` WHERE `targetGuid` = '%u'", player->GetGUIDLow());

CharacterDatabase.PExecute("INSERT INTO `exchange` (`guid`, `targetGuid`) VALUES ( '%u', '%u')", player->GetGUIDLow(), target->GetGUIDLow());
                    }
else
{
creature->MonsterWhisper("Nem talalom a jatekost!", player->GetGUID());
}
                    return true;
break;
}
            }
        }
        return false;
    }
};

void AddSC_npc_exchanger()
{
new npc_exchanger();
}
Cím: Re:Exchanger Npc
Írta: NevemSenki Dátum 2014 július 22, 10:06:13 DÉLELŐTT
Én erről még nem is halottam. Mit csinál ez konkrétan? Mi az értelme?

Üdv.: Senki
Cím: Re:Exchanger Npc
Írta: rasocsabi Dátum 2014 július 22, 12:47:27 DÉLUTÁN
2 player egymás között tudja a karaktereket kicserélni.
Pl:-Player:józsi -acc id:2
-Player2:zoltán -acc id:5
Csere megtörténik elfogadják mind a ketten akkor:
Player:józsi -acc id:5
-Player2:zoltán -acc id:2
A két ember karaktert cserélt.
Cím: Re:Exchanger Npc
Írta: Novan Dátum 2014 július 22, 12:57:15 DÉLUTÁN
Ezt a scriptet nekem írták, én ötletemmel lett megvalósítva ez a script. Egyedül Vng-nél használtam ezt a scriptet,és nem osztottam meg senkivel. Szóval Raso csak VNG-től kerülhetett hozzád, mert ügye te Vng-nél WOW configos voltál. Nem szép dolog az ügyfeleiteknek a dolgait ellopni, majd publikálni, hogy "ezt a gépemen találtam"... 
Cím: Re:Exchanger Npc
Írta: rasocsabi Dátum 2014 július 22, 01:53:43 DÉLUTÁN
VNG-s felhasználóktól semmiféle forrás fájt nemtudtunk letölteni.
Mellesleg semmiféle copyright nem található ezért osztattam itt meg.
Cím: Re:Exchanger Npc
Írta: Novan Dátum 2014 július 23, 01:32:01 DÉLUTÁN
Értem. Akkor egyszerűen rá termett a gépedre.
Cím: Re:Exchanger Npc
Írta: Aimedshot Dátum 2014 július 23, 01:53:24 DÉLUTÁN
nem mindegy?senki nem foglalkozik már wow szerverekkel, mintha bárki is felhasználná..
Cím: Re:Exchanger Npc
Írta: Novan Dátum 2014 július 23, 03:02:41 DÉLUTÁN
Nekem nem a felhasználással van a problémám, mert használja mindenki egészséggel. Hanem, hogy felrakom a cuccaim, és más ellopja, és publikálja. Nem első eset volt ez már. Hostingoknak kötelessége titokban tartani az ügyfelei adatait, és fájlait, nem pedig ők maguk lemásolni a gépükre, és publikálni. Elég szánalmas dolog
Cím: Re:Exchanger Npc
Írta: rasocsabi Dátum 2014 július 23, 07:59:24 DÉLUTÁN
Még gázabb hogy pont az egyik adminod küldte novan  :-*
Aimed éna zért raktam ki hogy aki még othon probálgat annak legyen lehetősége fejlszeteni :)
Cím: Re:Exchanger Npc
Írta: Novan Dátum 2014 július 23, 08:32:08 DÉLUTÁN
raso, Adminomnak nem volt hozzáférése a dolgokhoz. Egyedül DB-hez volt joga. Tudom, hogy most szégyenled és bevallani sem mered, hogy miket csináltál, de én tudom és nekem ennyi bőven elég.
Cím: Re:Exchanger Npc
Írta: rasocsabi Dátum 2014 július 23, 08:35:28 DÉLUTÁN
Nekem se volt hozzáférésem vagyis még mindig gázos valahol a te állitásod :(
Cím: Re:Exchanger Npc
Írta: NevemSenki Dátum 2014 július 24, 07:04:35 DÉLELŐTT
Hali.

Megértem azt hogy milyen érzés mikor valamit megcsinálsz, és az kikerül a nagyvilágba és úgy érzed hogy semmi közöd hozzá. Történt már velem is ilyen.
De most arról vitatkozni hogy kié volt eredetileg, ki hol találta, ki találta ki.. hogy került ide, felesleges.
Én egy dolgot tanultam meg, ha én biztos vagyok abban hogy amit neten találok az az enyém, én találtam ki és alkottam meg, akkor csak mosolygok a dolgon. Mert tudom hogy az akkor is az enyém marad bárki teszi is közzé.
Hogy ezt a sok olvasó nem tudja, hát ez van... nem leszek kevesebb tőle.
Ha rákerestek a dolgaimra, sok érdekes helyen megtaláljátok ugyan azt. Honnan tudom hogy ugyan azt találtam amit én ide, ebbe a Fórumba írtam? Hogy a kommentek kivételével minden pontosan ugyan az, a sortörések, a változó nevek meg minden. ( Meg amiket én csináltam, nem valami általános dolog, kevesen foglalkoznak vele.  )

Én ezt az ötletet amiről a Topic szól jó dolognak tartom, sosem találkoztam még hasonlóval. De itt most egyikőtök sem tudja bizonyítani hogy kié mié ez a dolog, ha egyáltalán akármelyikőtöknek is van hozzá valami köze.

Én ezt a Script-et le fogom tölteni, el fogom tenni, és mindenkinek beleírom a nevét kommentként aki csak hozzászólt a témához.
Köszönöm a Script-et!  :)

Üdv.: Senki
Cím: Re:Exchanger Npc
Írta: Novan Dátum 2014 július 24, 10:45:34 DÉLELŐTT
NevemSenki, amint írtam nem a script érdekel engem, hanem hogy feltöltöm a fájlaimat az egyik wowos hostnál, és a wow confos pedig ellopja. Ez már nem első alkalom volt Raso-tól.

Amúgy a scripthez van egy SQL is, amit a Character adatbázisba kell tölteni, mert az sql nélkül dc-ni fog a szerver. Sajnos nekem már nincsenek meg ezek a dolgok, mert tönkre ment a vinyóm, és azon volt minden wowos cuccom.
Cím: Re:Exchanger Npc
Írta: rasocsabi Dátum 2014 július 26, 09:35:17 DÉLUTÁN
Kedves NevemSenki. Amit leírtál nagyon megtetszet értékelem a megközelítésed.Ezentúl énis probálom átvenni ezt a szemléletetett.
Cím: Re:Exchanger Npc
Írta: zoltta Dátum 2014 augusztus 04, 07:07:50 DÉLUTÁN
Anno kb 2 éve ez a script megvolt Azuregos wowon is :D

ott igy mükődött : felvetted a küldit rád rakott egy pala bubit, persze egyszerre felkell venni mindkét karinak és 5-10 sec után dc-vel kicserélte a karikat. Egy karival nem müködött csak ki rakott pihenni :D ( dc )