What's new

-Tibia 7.60 Zakl?cia na tworzenie fluid?w

Status
Not open for further replies.

Khuznath

Active User
Joined
Jun 26, 2014
Messages
69
Reaction score
7
Cze??.

Pewna strona w sieci si? znajduj? na kt?rej s? dost?pne kody c++ pod wersj? 7.60, kt?re przetrwa?y po upadku forum Otsfotu, wi?c postanowi?em te? kilka powrzuca? wzoruj?c si? na tematach poprzednich wykonanych w takim stylu, a nie innym.

Autor: specx
Link ?rod?owy:
Testowany na: YurOTS 0.4.9f
Opis: Po wprowadzeniu tego kodu, stanie si? mo?liwe dodawanie zakl?? do tworzenia fluid?w (standardowo takie zakl?cia tworz? tylko jedzenie, amunicj? i runy). Ten system dzia?a na zasadzie podobnym do tworzenia run z blank runy - aby uzy? zakl?cia, musimy trzyma? w r?ce pust? fiolk? (vial) o ID 2006, po wypowiedzieniu zakl?cia, pusta fiolka otrzymuje zawarto??, tak?, jak? ustalili?my w pliku zakl?cia. W dodawanym zakl?ciu, b?dzie mo?na ustala?, jaki p?yn ma si? pojawi? w pustej fiolce, np. krew (blood).


Kod:

1. w spells.cpp
pod:
[CPP]lua_register(luaState, "makeRune", SpellScript::luaActionMakeRune);[/CPP]
dodaj:
[CPP]lua_register(luaState, "makeFluid", SpellScript::luaActionMakeFluid);[/CPP]

2. w spells.cpp
pod:
[CPP]if(item->getID() == ITEM_RUNE_BLANK){
p->addItemInventory(Item::CreateItem(id, charges ),sl_id);
return 1;
}
else{
return 0;
}
}
else{
return 0;
}
return 0;
}[/CPP]

dodaj:
[CPP]int SpellScript::luaActionMakeFluid(lua_State *L){
unsigned char charges = (unsigned char)lua_tonumber(L, -1);
lua_pop(L,1);

unsigned short type = (unsigned short)lua_tonumber(L, -1);
lua_pop(L,1);

Spell* spell = getSpell(L);
Creature* creature = spell->game->getCreatureByID((unsigned long)lua_tonumber(L, -1));
lua_pop(L,1);

Player* player = dynamic_cast<Player*>(creature);
if(player){
MagicEffectTargetClass magicTarget;

magicTarget.offensive = false;
magicTarget.drawblood = false;
magicTarget.animationEffect = 0;
magicTarget.attackType = ATTACK_NONE;
magicTarget.hitEffect = 255; //NM_ME_NONE
magicTarget.animationColor = 19; //GREEN

int a = -1;
int b = -1;

//try to create fluid 1
a = internalMakeFluid(player,SLOT_RIGHT,spell,type,charges);
if(a == 1) {
magicTarget.manaCost = spell->getMana();
}

//check if we got enough mana for the left hand
if(player->getMana() - magicTarget.manaCost >= magicTarget.manaCost) {
//try to create rune 2
b = internalMakeFluid(player,SLOT_LEFT,spell,type,charges);
if(b == 1) {
magicTarget.manaCost += spell->getMana();
}
}

if(a == -1 && b == -1){ //not enough mana
magicTarget.damageEffect = 2; //NM_ME_PUFF
magicTarget.manaCost = player->getPlayerInfo(PLAYERINFO_MAXMANA) + 1; //force not enough mana
}
else if( a == 0 && b == 0){ //not create any rune
magicTarget.damageEffect = 2; //NM_ME_PUFF
magicTarget.manaCost = 0;
}
else if(a == 1 || b == 1) {
magicTarget.damageEffect = 12; //NM_ME_MAGIC_ENERGIE = 12
}

/*else{
magicTarget.damageEffect = 12; //NM_ME_MAGIC_ENERGIE = 12

if(b==1){
magicTarget.manaCost = spell->getMana();
}
else{ //only create 1 rune
magicTarget.manaCost = 0;
}
}*/

bool isSuccess = spell->game->creatureThrowRune(player, player->pos, magicTarget);

lua_pushnumber(L, 1);
return 1;
}
lua_pushnumber(L, 0);
return 1;
}

//create new fluid and delete empty fluid ones
int SpellScript::internalMakeFluid(Player *p,unsigned short sl_id,Spell *S,unsigned short id, unsigned char charges){
//check mana
if(p->mana < S->getMana() || p->exhaustedTicks >= 1000)
return -1;
Item *item = p->getItem(sl_id);
if(item){
if(item->getID() == ITEM_FLUID_EMPTY){
p->addItemInventory(Item::CreateItem(id, charges ),sl_id);
return 1;
}
else{
return 0;
}
}
else{
return 0;
}
return 0;
}[/CPP]

3. w spells.h
pod:
[CPP]static int luaActionMakeRune(lua_State *L);[/CPP]
dodaj:
[CPP]static int luaActionMakeFluid(lua_State *L);[/CPP]

4. w spells.h
pod:
[CPP]static int internalMakeRune(Player *p,unsigned short sl_id,Spell *S,unsigned short id, unsigned char charges);[/CPP]
dodaj:
[CPP]static int internalMakeFluid(Player *p,unsigned short sl_id,Spell *S,unsigned short id, unsigned char charges);[/CPP]


Projekt przebudowa? (Ctrl+F11) i gotowe.


Dodatkowe opcje:

a) Po przebudowie projektu, mo?emy przetestowa? nasz dodatek:
1. w data\spells w pliku spells.xml
pod:
[xml]<?xml version="1.0"?>
<spells maxVoc="4">[/xml]
dodaj:
[xml]<spell name="Conjure Manafluid" words="exevo manafluid" maglv="2" mana="40" enabled="1"><vocation id="1" /> </spell>[/xml]
,gdzie:
Conjure Manafluid - og?lna nazwa zakl?cia (ma?o istotna),
exevo manafluid - tre?? zakl?cia, jak? posta? ma wym?wi?, dla tego testu daj exevo manafluid
2 - minimalny poziom magiczny (mlvl) do u?ycia zakl?cia,
40 - ilo?? spalanej many po u?yciu zakl?cia,
1 - je?eli chcemy bez usuwania wy??czy? zakl?cie z gry, zamiast 1, wpisujemy 0,
<vocation id="1" /> - kt?re profesje mog? u?ywa? tego zakl?cia, by doda? inne profesje, trzeba doda? ca??/e fraz?/y:
<vocation id="1" /> - (mag) sorcerer
<vocation id="2" /> - (druid) druid
<vocation id="3" /> - (?ucznik) paladin
<vocation id="4" /> - (rycerz) knight

2. w data\spells\instant
utw?rz testowy plik exevo manafluid.lua,
a w nim:
[LUA]function onCast(cid, creaturePos, level, maglv, var)
n = makeFluid(cid,2006,7);
return n
end[/LUA]
,gdzie 7 to rodzaj p?ynu, jaki ma posiada? pusta fiolka po inkantacji zakl?cia, domy?lnie do wyboru:
1 - woda (water)
2 - krew (blood)
3 - piwo (beer)
4 - szlam (slime)
5 - lemoniada (lemonade)
6 - mleko (milk)
7 - manafluid
9 - woda (water)
10 - lifefluid
11 - olej (oil)
12 - ??? (smile)
13 - mocz (urine)
15 - wino (wine)
19 - b?oto (mud)
26 - lawa (lava)
28 - bagno (swamp)


3. Po zapisaniu powy?szych plik?w i odpaleniu silnika, wloguj si? najlepiej na GMa, wpisz /i 2006 0 - pod Twoj? postaci? pojawi si? pusta fiolka. Umie?? j? w miejscu na r?k? i napisz exevo manafluid. Po tym fiolka powinna zamieni? si? w manafluida. Oczywi?cie po testach mo?na usun?? plik exevo manafluid.lua i usun?? wpisan? linijk? w spells.xml.
 
Status
Not open for further replies.
Top