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 :/
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 ..
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
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.)
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.
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
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;
Nagyon szépen köszönöm mindenkinek