What's new

Kod na sprzeda? domku przez Akt.

Status
Not open for further replies.

karkucik

Active User
Joined
Apr 26, 2008
Messages
146
Reaction score
9
Age
32
Autorem jestem ja.

opis z armia.toproste.pl
system bezpiecznego sprzedawania domkow:
Jezeli chcemy bezpiecznie sprzedac komus swoj domek musimy udac sie do NPC 'Akt', ktory jest w swiatyni glownego miasta na pierwszym pietrze. nastepnie kupujemy od niego 'akt' za 10k gdy juz posiadamy akt wlasnosci udajemy sie do naszego domku ktorego jestesmy wlascicielem, klikamy na akt wybierajac trade, a nastepnie na osobe ktorej chcemy sprzedac domek. na trade pojawia sie akt wlasnosci, klikamy na niego 'look', aby sprawdzic czy pojawi sie nazwa domku, jezeli osoba kupujaca zaoferowala nam odpowiednia cene to klikamy accept i w tym momencie zostaniemy wyrzuceni z domku, a nowym ownerem zostanie osoba ktora nam zaplacila za domek.
game.cpp
pod:
Code:
	Item *tradeItem = dynamic_cast<Item*>(getThing(pos, stackpos, player));
	if(!tradeItem || tradeItem->getID() != itemid || !tradeItem->isPickupable()) {
		player->sendCancel("Sorry, not possible.");
		return;
	}
dodajemy:
Code:
#ifdef __KIRO_AKT__	
	if(tradeItem->getID() == ITEM_AKT)
	{
       Tile* tile = getTile(player->pos);
       House* house = tile? tile->getHouse() : NULL;
       if(!house)
       {
		   player->sendCancel("Musisz stac w domku!");
		   return;
       }     
       if(house->getOwner() != player->getName())
       {
   		player->sendCancel("Musisz stac w swoim domku!");
	    return;
       }
     }
#endif
pod:
Code:
	player->setAcceptTrade(true);
	Player *tradePartner = getPlayerByID(player->tradePartner);
	if(tradePartner && tradePartner->getAcceptTrade()) {
		Item *tradeItem1 = player->tradeItem;
		Item *tradeItem2 = tradePartner->tradeItem;
		player->sendCloseTrade();
		tradePartner->sendCloseTrade();
dodajemy:
Code:
#ifdef __KIRO_AKT__
		if(tradeItem1->getID() == ITEM_AKT)
		{
           Tile* tile = getTile(player->pos);
           House* house = tile? tile->getHouse() : NULL;
		   Creature* creature = game->getCreatureByName(house->getOwner());
		   Player* prevOwner = creature? dynamic_cast<Player*>(creature) : NULL;
           if(!house)
           {
    		   player->sendCancel("Musisz stac w domku!");
    		   return;
           }     
           if(house->getOwner() != player->getName())
           {
       		player->sendCancel("Musisz stac w swoim domku!");
    	    return;
           }
           player->removeItem(tradeItem1, true);
           tradePartner->addItem(tradeItem1, true);
           player->addItem(tradeItem2, true);
           house->setOwner(tradePartner->getName());
           teleport(player,house->getFrontDoor());
           if (prevOwner)
              prevOwner->houseRightsChanged = true;
           tradePartner->houseRightsChanged = true;
         }
		else if(tradeItem2->getID() == ITEM_AKT)
		{
           Tile* tile = getTile(tradePartner->pos);
           House* house = tile? tile->getHouse() : NULL;
		   Creature* creature = game->getCreatureByName(house->getOwner());
		   Player* prevOwner = creature? dynamic_cast<Player*>(creature) : NULL;
           if(!house)
           {
    		   tradePartner->sendCancel("Musisz stac w domku!");
    		   return;
           }     
           if(house->getOwner() != tradePartner->getName())
           {
       		tradePartner->sendCancel("Musisz stac w swoim domku!");
    	    return;
           }
           tradePartner->removeItem(tradeItem1, true);
           player->addItem(tradeItem1, true);
           tradePartner->addItem(tradeItem2, true);
           house->setOwner(player->getName());
           teleport(tradePartner,house->getFrontDoor());
           if (prevOwner)
              prevOwner->houseRightsChanged = true;
           player->houseRightsChanged = true;
         }
#endif
pod:
Code:
	if(lookAtCounterOffer)
		tradeItem = tradePartner->getTradeItem();
	else
		tradeItem = player->getTradeItem();
	if(!tradeItem)
		return;
dodajemy:
Code:
#ifdef __KIRO_AKT__
		if(tradeItem->getID() == ITEM_AKT)
		{
           Tile* tile = getTile(tradePartner->pos);
           House* house = tile? tile->getHouse() : NULL;
           if(house && house->getOwner() == tradePartner->getName())
           {
            stringstream ss;
            ss << "You see " << tradeItem->getDescription(true) << " Dotyczy on domku: " << house->getName() << ".";
            player->sendTextMessage(MSG_INFO, ss.str().c_str());
		    return;
           }
         }
#endif
const76.h
pod:
Code:
	ITEM_WAND_OF_DRAGONBREATH	= 2191,
dodajemy:
Code:
#ifdef __KIRO_AKT__
    ITEM_AKT                    = 1952,
#endif
houses.h (uwaga, trzeba sprawdzi? czy czasem ju? tej funkcji nie mamy - w yurotsie d jej nie ma)
pod:
Code:
	std::string getGuests() const;
	std::string getDescription() const;
dodajemy:
Code:
#ifdef __KIRO_AKT__
    std::string getName() const { return name; }
#endif
Opcje projektu->parametry->kompilator c++
dodajemy
Code:
-D__KIRO_AKT__
I rebuild all ;)
 

Aragornkk

Senior User
Joined
Oct 11, 2008
Messages
705
Reaction score
44
Odp: Kod na sprzeda? domku przez Akt.

Wiesz mo?e co trzeba doda? w kodzie ?eby dzia?a?o pod 8.2 DT?
 

vintetsuin

Active User
Joined
Jul 6, 2008
Messages
52
Reaction score
1
Odp: Kod na sprzeda? domku przez Akt.

sa - tego skryptu przez ten dokument mo?na miec 2 domki ;p osoba 1 sprzeda 2 a tamta ma domek a dokument nie spr czy ktos ma juz domek
2 to ze 1 lvl moze miec domek a tak wszystko ok jak poprawisz b?d? zadowolony ;p
 

Varm

Advanced User
Joined
Jun 9, 2009
Messages
322
Reaction score
23
Odp: Kod na sprzeda? domku przez Akt.

Bardzo fajne mi sie podoba skozystalem z tego pod moj ots i jestem zadowolony polecam :D
Pozdrawiam
 

Pacyna86

User
Joined
Dec 6, 2008
Messages
23
Reaction score
0
Odp: Kod na sprzeda? domku przez Akt.

Autorem nie jest on tylko KIRO z otsoftu -.-

Potwierdzic ??
Code:
#ifdef __[B]KIRO[/B]_AKT__

i chyba wszystko jasne...

@edit Ju? sie wszystko wyja?ni?o Kiro i Karkucik to jedna i ta sama osoba :p sry
 
Last edited:

Fable1994

New User
Joined
Jul 19, 2009
Messages
4
Reaction score
0
Age
29
Odp: Kod na sprzeda? domku przez Akt.

nie powinno byc #ifdef __KIRO_AKT__
ITEM_AKT = 1952,
#endif//__KIRO_AKT__

?? pytam sie bo mi jakos nie dzialczy :(
 

Paolos

Advanced User
Joined
Nov 28, 2008
Messages
268
Reaction score
12
Odp: Kod na sprzeda? domku przez Akt.

Opcje projektu->parametry->kompilator c++
dodajemy
Code:
-D__KIRO_AKT__
I rebuild all ;)


Gdzie to jest ? Bo jako? nie potrafi? znale??.
 

Palladineq

New User
Joined
Sep 8, 2009
Messages
9
Reaction score
0
Odp: Kod na sprzeda? domku przez Akt.

Problemoss..
Mianowicie w game.cpp

przy kompilowaniu sa problemy z "game->"
dok?adnie to game jest undeclared ;/

da sie to jakos zadeklarowac zeby mozna by?o uzywac tego wlasnie tak? bo z tego co widze to "game->..." uzywa sie tylko przy kodzie PvP.. nigdzie indziej w pliku nie znajdziesz wyrazenia "game->"
 

artesik

Active User
Joined
Mar 8, 2009
Messages
97
Reaction score
1
Odp: Kod na sprzeda? domku przez Akt.

zle dodales gdzies albo czegos nie dodales (w game.h) zrob screena
 

Palladineq

New User
Joined
Sep 8, 2009
Messages
9
Reaction score
0
Odp: Kod na sprzeda? domku przez Akt.

Zauwaz ze w kodzie nie ma niczego ze trzeba wklejac w game.h ...?



Ok jest tak.. poprawki kt?re wprowadzi?em do kodu.. przetestowa?em i teraz dzia?a..

!!! to si? pojawia 2 razy
zamiast:
Code:
Creature* creature = game->getCreatureByName(house->getOwner());
powinno by?:
Code:
Creature* creature = getCreatureByName(house->getOwner());

i zamiast

Code:
#ifdef __KIRO_AKT__
    std::string getName() const { return name; }
#endif

powinno by?

Code:
#ifdef __KIRO_AKT__
    std::string getName() const; 
#endif

I teraz dzia?a jak nalezy..

Pozdrawiam,
Pall~
 
Last edited:

beowulf11

User
Joined
Jan 10, 2009
Messages
15
Reaction score
0
Odp: Kod na sprzeda? domku przez Akt.

1 bald ktory znalazles to nie jest blad gdyz w niektorych silnikach jest to potrzebna w yurotsie juz nie

2 blad to nie wiem o co chodzi mi nic takiego nie wyskakiwalo przy kompilacji wiec nie wiem w czym problem.
 

Palladineq

New User
Joined
Sep 8, 2009
Messages
9
Reaction score
0
Odp: Kod na sprzeda? domku przez Akt.

Kod juz dziala.. btw.. na innym forum zamiescilem poprawke wiec i tu to zrobie.
Poprawka dotyczy ilosci domk?w przypadaj?cych na gracza i dodatkowo ogranicza lvl na kupowanie.. Przy czym TRZEBA MIEC WKOMPILOWANA KOMENDE !BUYHOUSE zeby moja poprawka dzialala.. albo zadeklarowac to funkcje ktorych bedzie brakowalo jesli nei ma sie tej komendy... no wiec tak..

zamiast tego kodu:
Code:
#ifdef __KIRO_AKT__
		if(tradeItem1->getID() == ITEM_AKT)
		{
           Tile* tile = getTile(player->pos);
           House* house = tile? tile->getHouse() : NULL;
		   Creature* creature = game->getCreatureByName(house->getOwner());
		   Player* prevOwner = creature? dynamic_cast<Player*>(creature) : NULL;
		   
           if(!house)
           {
    		   player->sendCancel("Musisz stac w domku!");
    		   return;
           }     
           if(house->getOwner() != player->getName())
           {
       		player->sendCancel("Musisz stac w swoim domku!");
    	    return;
           }
           player->removeItem(tradeItem1, true);
           tradePartner->addItem(tradeItem1, true);
           player->addItem(tradeItem2, true);
           house->setOwner(tradePartner->getName());
           teleport(player,house->getFrontDoor());
           if (prevOwner)
              prevOwner->houseRightsChanged = true;
           tradePartner->houseRightsChanged = true;
           
         }
		else if(tradeItem2->getID() == ITEM_AKT)
		{
           Tile* tile = getTile(tradePartner->pos);
           House* house = tile? tile->getHouse() : NULL;
		   Creature* creature = game->getCreatureByName(house->getOwner());
		   Player* prevOwner = creature? dynamic_cast<Player*>(creature) : NULL;
		   
           if(!house)
           {
    		   tradePartner->sendCancel("Musisz stac w domku!");
    		   return;
           }     
           if(house->getOwner() != tradePartner->getName())
           {
       		tradePartner->sendCancel("Musisz stac w swoim domku!");
    	    return;
           }
           tradePartner->removeItem(tradeItem1, true);
           player->addItem(tradeItem1, true);
           tradePartner->addItem(tradeItem2, true);
           house->setOwner(player->getName());
           teleport(tradePartner,house->getFrontDoor());
           if (prevOwner)
              prevOwner->houseRightsChanged = true;
           player->houseRightsChanged = true;
           
         }

#endif

wklejamy ten:

Code:
#ifdef __KIRO_AKT__
		if(tradeItem1->getID() == ITEM_AKT)
		{
           Tile* tile = getTile(player->pos);
           House* house = tile? tile->getHouse() : NULL;
		   Creature* creature = getCreatureByName(house->getOwner());
		   Player* prevOwner = creature? dynamic_cast<Player*>(creature) : NULL;
           if(!house)
           {
    		   player->sendCancel("Musisz stac w domku!");
    		   return;
           }     
           if(house->getOwner() != player->getName())
           {
       		player->sendCancel("Musisz stac w swoim domku!");
    	    return;
           }
           if(house && house->checkHouseCount(tradePartner) >= g_config.getGlobalNumber("maxhouses", 0)){
              std::stringstream textmsg;
              textmsg << " Nie mozesz miec wiecej niz " << g_config.getGlobalNumber("maxhouses", 1) << " domek ";
              player->sendTextMessage(MSG_ADVANCE, textmsg.str().c_str());
              return;    
           }
               if (house && tradePartner->level < g_config.getGlobalNumber("buyhouselvl",1))
           {
            player->sendCancel("Ten gracz ma za maly poziom aby kupic od Ciebie dom!");
            return;
           }
           player->removeItem(tradeItem1, true);
           tradePartner->addItem(tradeItem1, true);
           player->addItem(tradeItem2, true);
           house->setOwner(tradePartner->getName());
           teleport(player,house->getFrontDoor());
           if (prevOwner)
              prevOwner->houseRightsChanged = true;
           tradePartner->houseRightsChanged = true;
         }
		else if(tradeItem2->getID() == ITEM_AKT)
		{
           Tile* tile = getTile(tradePartner->pos);
           House* house = tile? tile->getHouse() : NULL;
		   Creature* creature = getCreatureByName(house->getOwner());
		   Player* prevOwner = creature? dynamic_cast<Player*>(creature) : NULL;
           if(!house)
           {
    		   tradePartner->sendCancel("Musisz stac w domku!");
    		   return;
           }     
           if(house->getOwner() != tradePartner->getName())
           {
       		tradePartner->sendCancel("Musisz stac w swoim domku!");
    	    return;
           }
           if(house && house->checkHouseCount(player) >= g_config.getGlobalNumber("maxhouses", 0)){
              std::stringstream textmsg;
              textmsg << " Nie mozesz miec wiecej niz " << g_config.getGlobalNumber("maxhouses", 1) << " domek ";
              player->sendTextMessage(MSG_ADVANCE, textmsg.str().c_str());
              return;    
           }
               if (house && player->level < g_config.getGlobalNumber("buyhouselvl",1))
           {
            player->sendCancel("Ten gracz ma za maly poziom aby kupic od Ciebie dom!");
            return;
           }
             tradePartner->removeItem(tradeItem1, true);
           player->addItem(tradeItem1, true);
           tradePartner->addItem(tradeItem2, true);
           house->setOwner(player->getName());
           teleport(tradePartner,house->getFrontDoor());
           if (prevOwner)
              prevOwner->houseRightsChanged = true;
           player->houseRightsChanged = true;
         }
#endif

no i w config.lua
Code:
maxhouses = 1
buyhouselvl = 50

Pozdrawiam,
Pall~
 

korzonek93

Advanced User
Joined
Dec 14, 2008
Messages
151
Reaction score
1
Odp: Kod na sprzeda? domku przez Akt.

Jak kompiluje to w tej linijce jest b?ad
Code:
Creature* creature = game->getCreatureByName(house->getOwner());
 

Sen

New User
Joined
May 19, 2009
Messages
2
Reaction score
0
Odp: Kod na sprzeda? domku przez Akt.

no wszystko dobrze opr?cz tego ze ja nie mam takiego czegos jak game.h itd niczego nie mam z tych plikow :) pomozecie ??
 

Mr David

Advanced User
Joined
Nov 9, 2009
Messages
203
Reaction score
47
Odp: Kod na sprzeda? domku przez Akt.

Jak kompiluje to w tej linijce jest b?ad
Code:
Creature* creature = [B]game->[/B]getCreatureByName(house->getOwner());

Usu? game->, tam b?dzie jeszcze jedno takie, wiec usu?.

no wszystko dobrze opr?cz tego ze ja nie mam takiego czegos jak game.h itd niczego nie mam z tych plikow :) pomozecie ??

Nie masz tych plik?w poniewa? tw?j ots nie posiada sources. Radze u?ywa? czystego YurOTS'a, poniewa? tam masz sources, i wkompilowa? potrzebne kody.

Pozdrawiam,
Mr David.
 
Status
Not open for further replies.
Top