Jump to content
  • Announcements

    • Xmat

      Pravidlo pro postování v TTT

      Do sekce Tipy, triky, tutoriály nepatří žádné dotazy.   Postujte sem vaše návody, tipy a různé další věci jež uznáte za vhodné sdělit zdejšímu osazenstvu, ale veškeré dotazy směřujte do sekce Všeobecná diskuse.
    • Replik

      Seznam návodů a důležitých témat v této sekci

      Pro lepší přehlednost jsem vytvořil tento seznam, který vás, méně zkušené, lépe provede touto sekcí. Věřím, že zde najdete, co hledáte. Vypsané jsou návody, které jsou oficiálně uznané jako návody. Běžné diskuze, které neposkytují postupy a rady zvěřejněny nejsou.   Instalace vlastního MaNGOS Serveru Díky těmto návodům budete (měli by jste být) schopni vytvořit a následně spustit váš vlastní server. Nastavení je pro verze s i bez datadisku.   Instalace MaNGOS Serveru (bez datadisku TBC) - Autor Benny Instalace MaNGOS Serveru (s datadiskem TBC) - Autor Malfik Instalace MaNGOS Serveru v prostředí Linux - Autor charlie Instalace MaNGOS Serveru v prostředí Linux - Autor kupkoid   Chyby a jejich řešení při přihlašování k serveru - Autor Cybe   Zálohování uživatelských dat   Dávkový soubor (BAT soubor) pro vytvoření SQL záloh - Autor Replik   Kompilování - tvoření vlastních release (revizí)   Tvorba kompilací pro Win32 (MangoScript) - Autor bLuma   Ostatní - těžko zařaditelné, ale neznamená to, že nejsou dobré   VIP Systém - Autor charlie Tvorba Webových stránek pro MaNGOS - Autor zahuba Tvorba teleportačních NPC (MangoScript) - Autor Replik Registrační web (původně předělaná SPORA) Funkční pro Antrix i MaNGOS - Autor Replik Nastavení a spuštění Minimanager pro MaNGOS - Autor BlackMartin Nastavení MaNGOS Website - Autor Artorius   Samozřejmě jsou zde i jiné návody, ale tyto jsou nejvíce používané, proto věřím, že vám budou nápomocné. Tuto sekci budeme upravovat podle potřeby. Pokud by jste něco nenašli nebo si nevěděli rady, hledejte na fóru a teprve potom založte vlastní topik. Pokud nějaký autor vytvoří kvalitní návod a chtěl by ho zveřejnit i v tomto seznamu, doporučuji, aby mi napsal zprávu skrze PM.   Díky a přeji hezký den na WoWResource   Replik
    • Aristo

      Příspěvky tam, kde nemají co dělat

      Dodržujte zákaz přispívání do topiků s repaky pokud si to zakladatelé nepřejí!! Opakované psaní příspěvků bude trestáno warnem.
    • Aristo

      Používání spoilerů

      Poslední dobou má většina uživatelů fora zvláštní nutkání postovat extrémně dlouhé texty nebo kódy, které zabírají v nejedenom případu i 80% obsahu celé stránky a hodně tak zvedají nepřehlednost v topiku. Chtěl bych všechny uživatele požádat, aby při postování citací, jakýchkoliv kódů, errorů, atp... delších než 30 řádků používali funkci spoileru.   Funkci vyvoláte příkazem [spoiler] text [/spoiler]   Ukázka:  
Sign in to follow this  
achboDCA

[PHP] Kontrola bagu & volného miesta

Recommended Posts

Ahojte.

Chcem sa spýtať na jednu vec ..

Ako by sa dala spraviť funkcia na overenie či má hráč bag,aký veľký a ktoré miesto v ňom je volné?

Dá sa to nejako za pomoci PHP?

Ďakujem vopred za pomoc :)

Share this post


Link to post
Share on other sites

Můžu dotaz na co to potřebuješ?

Já jen jestli se to nedá řešit i jinou cestou.

Snažím sa spraviť jeden systém v PHP, niečo ako Vote s tým, že hráč keď odvolí dostane 1 bod, ktorý sa u zapíše do DB, a následne za tieto body bude môcť nakupovať veci vo "webshope" :)

Share this post


Link to post
Share on other sites

Na PHP ti házim kašnu, ale SQL spatlám. :)

 

1.) Zjištění počtu VŠECH (prázdných i plných) slotů v báglech:

SELECT `ContainerSlots` FROM `world_db`.`item_template` WHERE `entry` IN
(
 SELECT `itemEntry` FROM `characters_db`.`item_instance` WHERE `guid` IN
 (
   SELECT `item` FROM `characters_db`.`character_inventory` WHERE `guid` = 'ZDE_BUDE_ID_POSTAVY' AND `bag` = '0' AND `slot` IN(19,20,21,22)
 )
);

Vyselektuje ti to 0 až 4 číselné hodnoty, které když sečteš, vyjde ti celkový počet slotů v báglech.

 

2.) Zjištění počtu OBSAZENÝCH (plných) slotů v báglech (celkem):

SELECT COUNT(`item`) FROM `characters_db`.`character_inventory` WHERE `guid` = 'ZDE_BUDE_ID_POSTAVY' AND `bag` > '0';

Tímhle selectem dostaneš počet položek v báglech. Simply.

 

3.) Volné místo? Snad umíš počítat, ne? :P CelkovýPočet - ObsazenéMísto = VolnéMísto :D

 

Pozn.: Za ZDE_BUDE_ID_POSTAVY dosadíš (asi tušíš co) ID postavy - NENÍ to ID accountu!

Za characters_db dosaď jméno databáze postav, za world_db pak dosadíš jméno databáze světa.

 

That's all, folks. :diablo:

Edited by Wolf Officious
  • Upvote 3

Share this post


Link to post
Share on other sites

Snažím sa spraviť jeden systém v PHP, niečo ako Vote s tým, že hráč keď odvolí dostane 1 bod, ktorý sa u zapíše do DB, a následne za tieto body bude môcť nakupovať veci vo "webshope" :)

Čo tak mu to odoslať na mail ?
  • Upvote 2

Share this post


Link to post
Share on other sites

Čo tak mu to odoslať na mail ?

Přesně tak, všude se to tak dělá. Stačí na to jeden execute do DB a né milion selektů ke zjištění místa a pak další k vyhledání čísla volného slotu X v bagu Y. :D

 

EDIT: No, jestli to chce tak jak napsal, tak ať je po jeho. ;) Sice to je jako drbat se pravou zadní za leným uchem, ale jak se říká: "De gustibus non disputandum est". :)

Edited by Wolf Officious

Share this post


Link to post
Share on other sites

Přesně tak... Řešit to přes bágly je blbost. Přes mail je to mnohem pohodlnější a jednodušší.

Navíc ti stačí asi jen 3 query do DB, žádné složité selecty na zjišťování volných pozic.

Share this post


Link to post
Share on other sites

Jak tak na to koukám, nebude to nic jednoduchýho.

 

1.) Zjistit volný ID mailu:

SELECT MAX(`id`)+1 FROM `mail`;

Získáme ID_MAILU

 

2.) Zapsat mail:

INSERT INTO `mail` (`id`,`receiver`,`subject`,`body`,`has_items`) VALUES ('ID_MAILU', 'GUID_POSTAVY', "Predmet zpravy", "Obsah zpravy", '1');

 

3.) Zjistit volný GUID v item_instance:

SELECT MAX(`guid`)+1 FROM `item_instance`;

Získáme GUID_ITEM_INSTANCE

 

4.) Zapsat item do item_instance:

INSERT INTO `item_instance` (`guid`,`itemEntry`,`owner_guid`) VALUES ('GUID_ITEM_INSTANCE', 'ID_ITEMU', 'GUID_POSTAVY');

 

5.) Připojit item k mailu:

INSERT INTO `mail_items` (`mail_id`,`item_guid`,`receiver`) VALUES ('ID_MAILU', 'GUID_ITEM_INSTANCE', 'GUID_POSTAVY');

 

EDIT:

http://www.trinitycore.info/Mail_tc2

http://www.trinitycore.info/Mail_items_tc2

http://www.trinitycore.info/Item_instance_tc2

Edited by Wolf Officious
  • Upvote 4

Share this post


Link to post
Share on other sites

Maily bych odesílal přes RA consoli, není to tak lehký jak to vypadá.

Pokud si dobře vzpomínám, tak emulátor čte nové maily z DB jen při zapnutí nebo nějakým explicitním reloadu.

 

stáhni/napiš si na RA consoli nějakou třídu a je to raz dva.

 

$ra->connect(...)		  
$ra->login('user', 'pass')
$ra->sendCommand('send items pepa "Itemy" "Dobry den  zasilame predmety." id[:count]');

 

...

Edited by hisgrak
  • Upvote 4

Share this post


Link to post
Share on other sites

Akurát som to chcel napísať že to spravím cez mail :D v robote som nad tým porozmýšlal a uvážil som že to bude najlepšie cez mail :)

Partí vám velké ďakujem!

Share this post


Link to post
Share on other sites

Pokud si dobře vzpomínám, tak emulátor čte nové maily z DB jen při zapnutí nebo nějakým explicitním reloadu.

To není pravda. Maily přece odjakživa tečou přes třídu Player. V konstruktoru se vyzvednou (skrze ObjectMgr) a destruktor je smaže (z RAM). A koukni do metody Player::Update. :P

Ten mail přijde když to zapíšeš do DB. My na undergroundu jsme všem hráčům doporučovali relog postavy, když si nechali poslat itemy poštou. Fungovalo to. ;)

 

EDIT : A ještě něco. Pamatuješ na magosweb? Ten ti nedovolil se přihlásit na web, když jsi byl přihlášenej ve hře (s accountem). Mělo to svoje opodstatnění. :)

MIMOJINÉ, právě mangosweb uměl posílat emailem itemy. Byl tam jakýsi "VIP" systém. Nebylo by lepší si ten základ vypůjčit a poupravit to? :)

Edited by Wolf Officious

Share this post


Link to post
Share on other sites

Nebylo by lepší si ten základ vypůjčit a poupravit to? :)

 

Možno áno, ale ja si to chcem celé spraviť sám :) budem mať potom krajší pocit na duši :nw2_guitar:

Share this post


Link to post
Share on other sites

To není pravda. Maily přece odjakživa tečou přes třídu Player. V konstruktoru se vyzvednou (skrze ObjectMgr) a destruktor je smaže (z RAM). A koukni do metody Player::Update. :P

Ten mail přijde když to zapíšeš do DB. My na undergroundu jsme všem hráčům doporučovali relog postavy, když si nechali poslat itemy poštou. Fungovalo to. ;)

 

EDIT : A ještě něco. Pamatuješ na magosweb? Ten ti nedovolil se přihlásit na web, když jsi byl přihlášenej ve hře (s accountem). Mělo to svoje opodstatnění. :)

MIMOJINÉ, právě mangosweb uměl posílat emailem itemy. Byl tam jakýsi "VIP" systém. Nebylo by lepší si ten základ vypůjčit a poupravit to? :)

Relog postavy není explicitní akce?

Když to odešleš přes RA, tak vše vyřeší emulátor a nemusíš řešit nic.

Edited by hisgrak

Share this post


Link to post
Share on other sites

Relog postavy není explicitní akce?

Když to odešleš přes RA, tak vše vyřeší emulátor a nemusíš řešit nic.

Přečti si co jsem napsal a vyparsuj to přes mozek ještě jednou.

Znáš funkci Player::Update(...)? Tam se handlujou maily. Mail přijde do intervalu nastaveném v configu.

Povolovat RA může být nebezpečné - nedoporučuju to ani svému nepříteli.

 

Možno áno, ale ja si to chcem celé spraviť sám :) budem mať potom krajší pocit na duši :nw2_guitar:

To je postavený na hlavu. Stejně jako bys psal wrapper pro https a odmítal použití frameworků a OpenSSL, který by ti ušetřili mnoho a mnoho práce.

Proč dělat něco, co už existuje a funguje? Neříkám ti abys to kompletně obšlehnul, to by stejně nefungovalo. Proč se neinspirovat již hotovým kódem?

Kdybych všechno dělal pro dobrej pocit v duši, dělal bych dodnes konzolovky a kadil bych se s emulátorama wowka.

Ale je to na tobě, já jsem ti k tomu svoje řekl a stojím si za tím. :)

Share this post


Link to post
Share on other sites

Az na to, ze ti ten mail prijde az po restartovani emulatoru, protoze Player::Update se vola jen kdyz je hrac online a veskera sluzba je odeslana emulatorem. Maily jsou interni runtime zalezitost, jsou nacteny v pameti. Takze tvuj postup Wolfe sice je mozny, ale mail prijde az po restartu.

 

EDIT:

 

Jinak urcite by bylo lepsi posilat pres cron prikaz rovnou do ssh screenu prikaz :-)

Edited by HyN3Q
  • Upvote 1

Share this post


Link to post
Share on other sites

HyN3Q: Něco bude na obou tvrzeních. Já z praxe vím, že mě to fungovalo. Zkus si to a uvidíš. :)

A posílat do screenu příkazy je snad ještě větší prů*er než celej starej RA.

 

A co třeba SOAP? :P (RA != SOAP)

 

Příklad z MaNGOSu:

 

<?php
/*
* $username and $password MUST be uppercase
* account $username needs at least SEC_ADMINISTRATOR
*/
$username = 'ADMINISTRATOR';
$password = 'ADMINISTRATOR';

$host = "localhost"; // IP nebo HOSTNAME
$soapport = 7878; // PORT
$command = "server info"; // PŘÍKAZ

$client = new SoapClient(NULL,
array(
   'location' =------> "http://".$host.":".$soapport"/",
   'uri' => "urn:MaNGOS",
   'style' => SOAP_RPC,
   'login' => $username,
   'password' => $password
));

try {
   $result = $client->executeCommand(new SoapParam($command, "command"));

   echo "Command succeeded! Output:
\n";
   echo $result;
}
catch (Exception $e)
{
   echo "Command failed! Reason:
\n";
   echo $e->getMessage();
}
?>

 

https://github.com/mangos/server/blob/master/contrib/soap/example.php

 

EDIT: Ale dělejte si to všichni po svým. :D;) Po pravdě, přes konzoli je to určitě nejjednoduší.

Edited by Wolf Officious

Share this post


Link to post
Share on other sites

Je fakt, ze vnejsim pristupem posilat neco screenem je fakt blbost :D Mozna to ma ale MaNGOS jinak, ja jsem developer na strukturu Trinity :)

 

edit: ja si to zkusit nemuzu, dostal jsem zakaz od hlavniho deva kdyz jsem se ho ptal, jestli by to bylo mozne ikdyz je emu online :D A na localhostu mam takovy bordel a jsem liny po sobe uklidit to :D

Edited by HyN3Q

Share this post


Link to post
Share on other sites

Je fakt, ze vnejsim pristupem posilat neco screenem je fakt blbost :D Mozna to ma ale MaNGOS jinak, ja jsem developer na strukturu Trinity :)

Jsme v sekci TC. Kdyby to na TC nebylo stejný, nepsal bych o tom. TC má taky SOAP (což bys měl vědět, developere... ne?). ;)

Share this post


Link to post
Share on other sites

Jsme v sekci TC. Kdyby to na TC nebylo stejný, nepsal bych o tom. TC má taky SOAP (což bys měl vědět, developere... ne?). ;)

Vsak ja vim, ze ma SOAP, spatne jsem se vyjjadril ja myslel ze ty SQL maily ma MaNGOS jinak :)

  • Upvote 1
  • Downvote 1

Share this post


Link to post
Share on other sites

Vsak ja vim, ze ma SOAP, spatne jsem se vyjjadril ja myslel ze ty SQL maily ma MaNGOS jinak :)

A proč myslíš že jsem u těch SQL, který jsem psal, házel odkazy na TDB wiki? Nebude to náhodou tím, že je to TC struktura? Přestaň se v tom rýpat. ;)

 

EDIT: Zde http://www.wowresource.eu/index.php?showtopic=25695&view=findpost&p=226024

Edited by Wolf Officious

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×