• logo_cipsoft
    Nowe serwery zostały otwarte 19 Lut 2025:
    Noctalia (Open PvP) Ignitera (Open PvP) us_logo Xybra (Open PvP)

[x.xx]Nowa waluta! Kod umo?liwiaj?cy handel

Status
Zamknięty.

NauR

User
Dołączył
Maj 21, 2008
Posty
14
Liczba reakcji
1
Szuka?em, pr?bowa?em w ko?cu znalaz?em. Ka?dy z nas chce mie? na swoim otsie co? cenniejszego ni? crystal coinsy nic prostszego szybki skrypt w actions i nasze cc zamieniamy na per?y scarab coinsy i tym podobne rzeczy lecz pozostaje ma?e ale... nie da si? nimi handlowa?. Mi w ko?cu uda?o si? znale?? rozwi?zanie wystarczy?o pomy?le?.
zr?bmy przyk?adowo pod zamian? na talony

otwieramy w ?r?dle const.h game.cpp item.cpp oraz global.lua w folderze data.

w const.h wyszukujemy:
PHP:
	ITEM_COINS_GOLD       = 2148,
	ITEM_COINS_PLATINUM   = 2152,
	ITEM_COINS_CRYSTAL    = 2160,
i pod tym dodajemy:
Kod:
ITEM_COINS_[COLOR="Red"][B]TALONS[/B][/COLOR]   = [B][COLOR="Blue"]2972[/COLOR][/B],

nastepnie przechodzimy do game.cpp i znajdujemy:
PHP:
			int remaind = item->getWorth() - money;
			int crys = remaind / 10000;
			remaind = remaind - crys * 10000;
			int plat = remaind / 100;
			remaind = remaind - plat * 100;
			int gold = remaind;

			if(crys != 0){
				Item* remaindItem = Item::CreateItem(ITEM_COINS_CRYSTAL, crys);

				ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags);
				if(ret != RET_NOERROR){
					internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT);
				}
			}

			if(plat != 0){
				Item* remaindItem = Item::CreateItem(ITEM_COINS_PLATINUM, plat);

				ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags);
				if(ret != RET_NOERROR){
					internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT);
				}
			}

			if(gold != 0){
				Item* remaindItem = Item::CreateItem(ITEM_COINS_GOLD, gold);

				ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags);
				if(ret != RET_NOERROR){
					internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT);
				}
			}

			money = 0;
		}
miedzy
Kod:
 			int remaind = item->getWorth() - money;
			int crys = remaind / 10000;
dodajemy
Kod:
			int [COLOR="Orange"][B]tlns[/B][/COLOR] = remaind / 1000000;
			remaind = remaind - [COLOR="Orange"][B]tlns[/B][/COLOR] * 1000000;

a przed
PHP:
			if(crys != 0){
				Item* remaindItem = Item::CreateItem(ITEM_COINS_CRYSTAL, crys);

				ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags);
				if(ret != RET_NOERROR){
					internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT);
				}
			}
dodajemy
Kod:
if([COLOR="Orange"]tlns[/COLOR] != 0){
				Item* remaindItem = Item::CreateItem(ITEM_COINS_[COLOR="Red"][B]TALONS[/B][/COLOR], [COLOR="Orange"][B]tlns[/B][/COLOR]);

				ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags);
				if(ret != RET_NOERROR){
					internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT);
				}
			}

przechodzimy do item.cpp i znajdujemy:
PHP:
int Item::getWorth() const
{
	switch(getID()){
	case ITEM_COINS_GOLD:
		return getItemCount();
	case ITEM_COINS_PLATINUM:
		return getItemCount() * 100;
	case ITEM_COINS_CRYSTAL:
		return getItemCount() * 10000;
	default:
		return 0;
	}
}
przed default dodajemy
Kod:
	case ITEM_COINS_[COLOR="Red"][B]TALONS[/B][/COLOR]:
		return getItemCount() * 1000000;

Dla TFS
const.h edytujemy tak samo

item.cpp z ta roznica ze nie wyszukujemy funkcji int Item::getWorth() const tylko int32_t Item::getWorth() const i wklejamy z dodatkowym break;

w game.cpp znajdujemy definicje funkcji addMoney:
PHP:
void Game::addMoney(Cylinder* cylinder, int32_t money, uint32_t flags /*= 0*/)
{
	int32_t crys = money / 10000;
	money -= crys * 10000;
	int32_t plat = money / 100;
	money -= plat * 100;
	int32_t gold = money;

	if(crys != 0)
	{
		Item* remaindItem = Item::CreateItem(ITEM_COINS_CRYSTAL, crys);

		ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags);
		if(ret != RET_NOERROR)
			internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT);
	}

	if(plat != 0)
	{
		Item* remaindItem = Item::CreateItem(ITEM_COINS_PLATINUM, plat);

		ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags);
		if(ret != RET_NOERROR)
			internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT);
	}

	if(gold != 0)
	{
		Item* remaindItem = Item::CreateItem(ITEM_COINS_GOLD, gold);

		ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags);
		if(ret != RET_NOERROR)
			internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT);
	}
}
podmieniamy ja na:
Kod:
void Game::addMoney(Cylinder* cylinder, int32_t money, uint32_t flags /*= 0*/)
{
	int32_t [COLOR="Orange"]tlns[/COLOR] = money / 1000000;
	money -= [COLOR="Orange"]tlns[/COLOR] * 1000000;
	int32_t crys = money / 10000;
	money -= crys * 10000;
	int32_t plat = money / 100;
	money -= plat * 100;
	int32_t gold = money;

	if([COLOR="Orange"]tlns[/COLOR] != 0)
	{
		Item* remaindItem = Item::CreateItem(ITEM_COINS_[COLOR="Red"]TALONS[/COLOR], [COLOR="Orange"]tlns[/COLOR]);

		ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags);
		if(ret != RET_NOERROR)
			internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT);
	}


	if(crys != 0)
	{
		Item* remaindItem = Item::CreateItem(ITEM_COINS_CRYSTAL, crys);

		ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags);
		if(ret != RET_NOERROR)
			internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT);
	}

	if(plat != 0)
	{
		Item* remaindItem = Item::CreateItem(ITEM_COINS_PLATINUM, plat);

		ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags);
		if(ret != RET_NOERROR)
			internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT);
	}

	if(gold != 0)
	{
		Item* remaindItem = Item::CreateItem(ITEM_COINS_GOLD, gold);

		ReturnValue ret = internalAddItem(cylinder, remaindItem, INDEX_WHEREEVER, flags);
		if(ret != RET_NOERROR)
			internalAddItem(cylinder->getTile(), remaindItem, INDEX_WHEREEVER, FLAG_NOLIMIT);
	}

kompilujemy silnik

wchodzimy do global.lua i dodajemy
Kod:
ITEM_[COLOR="Red"][B]TALON[/B][/COLOR]_COIN = [B][COLOR="Blue"]2972[/COLOR][/B]

je?eli chcemy inny przedmiot zamiast walute podmieniamy:
to co na czerwono na nazwe przedmiotu (np. SCARAB)
to co na niebiesko na id przedmiotu ktory chcemy za walute
to co na pomaranczowo na skrot nazwe najlepiej 4 literowy (np. scar)

i tyle
 
Superm w?a?nie szuka?em takiego czego?, ale m?g?by? napisa? jeszcze co trzeba zrobi?, ?eby wogule scaraby (b?d? talonsy) by?y pieni?dzmi! :confused:
 
zaraz sprawdz?, a pod jaki silnik dzia?a ten pierwszy pod sql czy xml i pod jaki konkretniej silnik?? bo mog?o by si? przyda?.
 
@dreael
Ten skrypt napewno dzia?a pod xml, ale nie wiem czy pod sql. Pod YourOts.
 
Odp: [x.xx]Nowa waluta! Kod umo?liwiaj?cy handel

@ronida
nie YourOTS tylko YurOts od stw?rcy Yureza. Taka ma?? wpadka :)
@drealen
1 kod dziala pod wszystkie silniki oprocz TFS. Sprawdza?em i na SQL te? dzia?a
@topic
Kod bardzo dobry,wszystko dzia?a poprawnie
 
Odp: [x.xx]Nowa waluta! Kod umo?liwiaj?cy handel

no sorki ja niepottrafie znale?? tego pierwszego pliku...wog?le ja jestem zielony plixx bardzo prosze o pomoc !! to moje gg :13145346
 
Odp: [x.xx]Nowa waluta! Kod umo?liwiaj?cy handel

Plik dobry. dziala ale autor nie ustrzegl sie beldow czyli: ten najdluzszy text ktory autor kaze znalesc w game.cpp to znajduje sie w players.cpp
oraz jesli mamy jurka kody sa do poprawki czyli:
W
items.cpp
Kod:
case ITEM_COINS_SCARAB:
		return getItemCountOrSubtype() * 1000000;
oraz
w player.cpp
Kod:
if(scar != 0){
		Item *remaindItem = Item::CreateItem(ITEM_COINS_SCARAB, scar);
		if(!this->addItem(remaindItem))
			g_game.addThing(NULL,this->pos,remaindItem);
Zalety jurka ;p ale ogolnie skrypt mi chodzi ;p
 
Odp: [x.xx]Nowa waluta! Kod umo?liwiaj?cy handel

da?o by rade zrobi? to pod tfs 0.3.3 bo nie umie przerobi?;(
 
Odp: [x.xx]Nowa waluta! Kod umo?liwiaj?cy handel

OO super szuka?em tego 2 tygodnie i nareszcie :D Wielkie thx !!
 
Odp: [x.xx]Nowa waluta! Kod umo?liwiaj?cy handel

Jak by kto? chcia? przerobi?em tego scrypta pod Yurka 0.2.3.
Jak cos piszcie na gadu.
 
Status
Zamknięty.
Do góry