Rúd --->Yang

Indította keksz022, 2019-10-27, 20:25:45

2019-10-27, 20:25:45 Utolsó szerkesztés: 2019-10-27, 20:46:37 Szerző: keksz022
Sziasztok..

Kérdésem lenne a következő

quest rud begin
state start begin
when 80007.use begin
pc.remove_item(80007,1)
end
pc.give_gold( "300000000" )
end
end
end


Írtam ezt  a questet hogy ne kelljen be húzogatni és úgy eladni a rudat , hanem szimpla kattintással meg adja a 300millát.. DE! nem veszi el a rudat a yangot megadja XD hahaha
Mivel kellene kiegészítenem még ezt a fost hogy jó legyen? :D

EDIT : Megoldottam az adás dolgot pc.change_money( "300000000" ) ezzel
Csak az a gáz ha meg van a 2mrd még ugyan úgy lehet nyomni el a rudakat... nem írja hogy MAX :/
töröltem [BA]Thymea

A quested is rossz...

Így kellene:

quest rud begin
state start begin
when 80007.use begin
pc.remove_item(80007,1)
pc.give_gold( "300000000" )
end
end
end

Kérlek olvasd végig amit leírtam :)

pc.give_gold NEM JÓ !! mert a rúd nem tűnik el.. még egyszer le írom, az a para most már hogy akkor is váltja mikor elértem a MAX yangot ..
töröltem [BA]Thymea

2019-10-27, 21:48:23 #3 Utolsó szerkesztés: 2019-10-27, 21:56:12 Szerző: OneCharakter
Szia nem teszteltem de működnie kellene (forrásos megoldás csak a static int-es sorokat kell növelni ha többet akarsz
pl
static int GOLD_BOX[][2] =
{
80007, 300000000,
80006, 100000000,
80005, 200000000
};

)


char_item.cpp

megkeresed:
switch (item->GetType())
{
case ITEM_HAIR:
return ItemProcess_Hair(item, wDestCell);

case ITEM_POLYMORPH:
return ItemProcess_Polymorph(item);


felé:
static int GOLD_BOX[][2] =
{
80007, 300000000
};

for (int GOLD = 0; GOLD <= _countof(GOLD_BOX); GOLD++)
{
int max_gold = 2000000000;

if (GetGold() >= (max_gold - GOLD_BOX[GOLD][2]))
{
ChatPacket(CHAT_TYPE_INFO, "Nem teheted meg, túl sok a yangod [ %d].", GetGold());
return false;
}

if (item->GetVnum() == GOLD_BOX[GOLD][1])
{
SetGold(GetGold() + GOLD_BOX[GOLD][2]);
item->SetCount(item->GetCount() - 1);
ChatPacket(CHAT_TYPE_INFO, "Te %ld Yangot kaptál.", GOLD_BOX[GOLD][2]);
}
}


Köszönöm szépen <3

Per pillanat már lefeküdtem :D De ha oda jutok ki próbálom minden féleképp
töröltem [BA]Thymea

2019-10-28, 06:52:18 #5 Utolsó szerkesztés: 2019-10-28, 18:43:18 Szerző: Chookez™
You can't see this.

Elég nagy hülyeséget írtam tegnap mivel indexelést sem vettem figyelembe, na meg azt se hogy alapból nem frissíti így a leltárban lévő értéket így javítva ezt:

char.cpp

keresd meg:

DWORD CHARACTER::GetNextExp() const
{
if (PLAYER_EXP_TABLE_MAX < GetLevel())
return 2500000000;
else
return exp_table[GetLevel()];
}


felé:
int CHARACTER::ChangeGold(long gold)
{
DBManager::instance().SendMoneyLog(MONEY_LOG_QUEST, GetPlayerID(), gold);
PointChange(POINT_GOLD, gold, true);
return true;
}


char.h

keresd meg:
public:
void SetLastSyncTime(const timeval &tv) { memcpy(&m_tvLastSyncTime, &tv, sizeof(timeval)); }
const timeval& GetLastSyncTime() { return m_tvLastSyncTime; }
void SetSyncHackCount(int iCount) { m_iSyncHackCount = iCount;}
int GetSyncHackCount() { return m_iSyncHackCount; }


alá:
int ChangeGold(long gold = 0);

char_item.cpp

keresd meg :
switch (item->GetType())
{
case ITEM_HAIR:
return ItemProcess_Hair(item, wDestCell);

case ITEM_POLYMORPH:
return ItemProcess_Polymorph(item);


felé:
static int GOLD_BOX[][2] =
{
80003, 100000000,
80004, 150000000,
80005, 200000000,
80006, 250000000,
80007, 300000000
};

for (int GOLD = 0; GOLD <= _countof(GOLD_BOX); GOLD++)
{
if (GetGold() < (GOLD_MAX - GOLD_BOX[GOLD][1]))
{
if (item->GetVnum() == GOLD_BOX[GOLD][0])
{
ChangeGold(GOLD_BOX[GOLD][1]);
item->SetCount(item->GetCount() - 1);
}
}
}


(Tesztelve.)

2019-10-28, 17:45:02 #7 Utolsó szerkesztés: 2019-10-28, 17:48:03 Szerző: [VIP]Rin the Exorcist
Na jó.. Ennyi furcsábbnál furcsább megoldás után már egyszerűen szükségesnek érzem, hogy megosszam a saját verziómat, amit 3+ éve írhattam valamikor.

char_item.cpp
keres:

case ITEM_AUTOUSE:
case ITEM_MATERIAL:
case ITEM_SPECIAL:
case ITEM_TOOL:
case ITEM_LOTTERY:
break;


cserél:
case ITEM_AUTOUSE:
case ITEM_MATERIAL:
case ITEM_TOOL:
case ITEM_LOTTERY:
break;
case ITEM_SPECIAL:
{
if (item->GetVnum() >= 80003 && item->GetVnum() <= 80007)
{
GiveGold(item->GetShopBuyPrice());
item->SetCount(item->GetCount() - 1);
}
}
break;


És ennyi az egész.. Item proto-ból olvassa ki az értékét, ahol eredetileg is be kell állítani. Annyi, hogy aki nem szedte ki az indokolatlan árak öttel való osztását annak egy "/5"-re szüksége lehet GiveGold metódusba.
"Tisztelet a kivételnek! Mindig tisztelet a kivételnek!"
"KezdÅ' vagyok, ne nézz le... (:"

2019-10-28, 18:35:40 #8 Utolsó szerkesztés: 2019-10-28, 18:56:44 Szerző: OneCharakter
if (item->GetVnum() >= 80003 && item->GetVnum() <= 80007)
{
GiveGold(item->GetShopBuyPrice());
item->SetCount(item->GetCount() - 1);
}


Ebben az esetben nem teljesülne az a feltétel , hogy ne tudja elhasználni mikor már meghaladná a maximum gold-ot, de amúgy igazad van ez a legjobb megoldás.

if ((item->GetVnum() >= 80003 && item->GetVnum() <= 80007) && (GetGold() < (GOLD_MAX - item->GetShopBuyPrice())))
{
GiveGold(item->GetShopBuyPrice());
item->SetCount(item->GetCount() - 1);
}

when 80007.use begin
            if (pc.get_gold() + 300000000) >= 2000000000 then
               chat("Maximum 2 milliárd lehet nálad Yang formájában!")
            else
               pc.remove_item(80007, 1)
               pc.change_money(300000000)
            end
         end

2019-10-28, 23:51:53 #10 Utolsó szerkesztés: 2019-10-29, 00:01:10 Szerző: [VIP]Rin the Exorcist
Idézetet írta: OneCharakter Dátum 2019-10-28, 18:35:40
if (item->GetVnum() >= 80003 && item->GetVnum() <= 80007)
{
GiveGold(item->GetShopBuyPrice());
item->SetCount(item->GetCount() - 1);
}


Ebben az esetben nem teljesülne az a feltétel , hogy ne tudja elhasználni mikor már meghaladná a maximum gold-ot, de amúgy igazad van ez a legjobb megoldás.

if ((item->GetVnum() >= 80003 && item->GetVnum() <= 80007) && (GetGold() < (GOLD_MAX - item->GetShopBuyPrice())))
{
GiveGold(item->GetShopBuyPrice());
item->SetCount(item->GetCount() - 1);
}



Nos igen, úgy látszik régen nem teszteltem le minden hibalehetőséget. De akkor már a játékosoknak is érdemes lenne visszajelzést adni a történtekről, meg ezenfelül elég nyakatekert módszerrel ellenőrzöd a pénzt.
case ITEM_SPECIAL:
{
if (item->GetVnum() >= 80003 && item->GetVnum() <= 80007)
{
if (GOLD_MAX <= (GetGold() + item->GetShopBuyPrice()))
{
ChatPacket(CHAT_TYPE_INFO, "max pénz %d yang", GOLD_MAX-1);
return false;
}
GiveGold(item->GetShopBuyPrice());
item->SetCount(item->GetCount()-1);
}
}
break;
"Tisztelet a kivételnek! Mindig tisztelet a kivételnek!"
"KezdÅ' vagyok, ne nézz le... (:"

2019-10-29, 10:48:33 #11 Utolsó szerkesztés: 2019-10-31, 15:50:20 Szerző: keksz022
Nagyon szépen köszönöm mindenkinek
töröltem [BA]Thymea