Forum poświęcone powstawaniu Belxena OTS
Witam. Postanowiłem napisać kilka nowych funkcji, które mam nadzieję użyjecie w swoim otsie. Wszystkie funkcje są zrobione w całości przeze mnie. Zabraniam rozpowszechniania tych funkcji bez mojej zgody. No więc zaczynamy:
1. Na początku otwórz plik global.lua, który znajduje się w folderze otsa/data.
2. Teraz zjedź na sam dół.
funkcje lua proste ale przydatne to do roboty
Wszystkie funkcje wklejamy do global.lua lub w nowszych silnikach functions.lua
#1 funkcja doTeleportThingEffect(cid, pozycja, efektPrzedTeleportacją, efektPo)
Cytat:
function doTeleportThingEffect(cid, newpos, effect, aftereffect)
local pos = getPlayerPosition(cid)
doSendMagicEffect(pos, effect)
doTeleportThing(cid, newpos)
doSendMagicEffect(newpos, aftereffect)
return 1
end
#2 funkcja doPlayerRemoveHpProcent(cid, procentHpJakieMaByćZabrane)
Cytat:
function doPlayerRemoveHpProcent(cid, procent)
local hp = getPlayerHealth(cid)
local remove = (hp*procent)/100
doPlayerAddHealth(cid,-remove)
return 1
end
#3 funkcja doPlayerRemoveManaProcent(cid, procentManaJakieMaByćZabrane)
Cytat:
function doPlayerRemoveManaProcent(cid, procent)
local mana = getPlayerMana(cid)
local remove = (mana*procent)/100
doPlayerAddMana(cid,-remove)
return 1
end
#4 funkcja doPlayerKill(cid) Bez komentarza
Cytat:
function doPlayerKill(cid)
local mana = getPlayerMana(cid)
local hp = getPlayerHealth(cid)
local kill = (mana+hp)+2
doPlayerAddHealth(cid,-kill)
return 1
end
Kod:
Dodawanie maksymalnej many gracza
Dodawanie maksymalnego hp gracza
Dodawanie danego skilla (skillów) graczowi.
doSearchCreatureInRoom(posx1, posy1, posx2, posy2, posz) -- Szuka, czy w pomiedzy tymi pozycjami jest jakiś potwór. Zwraca ilość potwórów. Jeżeli nie znalazło żadnych potworów zwraca 0
Jak dodać te funkcje?
We wcześniej otwartym pliku global.lua na samym dole dodaj odpowiednie funkcje. Reszte trzeba dorzucić do skryptów ;/ Inaczej się nie dało niestety.
Dla doSearchCreatureInRoom:
Kod:
function doSearchCreatureInRoom(posx1, posy1, posx2, posy2, posz)
local position1 = {x=posx1, y=posy1, z=posz}
local position2 = {x=posx2, y=posy2, z=posz}
ile_monsterow = 0
for x=position1.x, position2.x do
for y=position1.y, position2.y do
local monsterpos = {x=x, y=y, z=posz, stackpos=253}
local monster = getThingfromPos(monsterpos)
if (monster > 0) then
if (isPlayer(monster) == 0) then
ile_monsterow = ile_monsterow+1
end
end
end
end
return ile_monsterow
end
Następnie zapisujemy plik i zamykamy.
Przykłady użycia każdej z tych funkcji:
doPlayerAddMaxHealth:
Kod:
local ile_godzin = 5
local ile_hp = 100
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
local condition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_TICKS, ile_godzin*1000*60*60)
setConditionParam(condition, CONDITION_PARAM_STAT_MAXHITPOINTS, ile_hp)
setCombatCondition(combat, condition)
function onUse(cid, item, frompos, item2, topos)
return doCombat(cid, combat, numberToVariant(cid))
end
doPlayerAddMaxMana:
Kod:
local ile_godzin = 5
local ile_many = 100
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
local condition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_TICKS, ile_godzin*1000*60*60)
setConditionParam(condition, CONDITION_PARAM_STAT_MAXMANAPOINTS, ile_many)
setCombatCondition(combat, condition)
function onUse(cid, item, frompos, item2, topos)
return doCombat(cid, combat, numberToVariant(cid))
end
end
doPlayerAddSkill:
Kod:
local skillid = 1 -- Id skila. Mozliwe: 1-melee, 2-fist, 3-club, 4-sword, 5-axe, 6-distance, 7-shielding, 8-fishing
local ile = 10 -- Ile skil dodaje
local na_ile = 60*1000 -- Ile ma dzialac w sekundach
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, 0)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_GREEN)
local condition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_TICKS, na_ile)
if (skillid == 1) then
setConditionParam(condition, CONDITION_PARAM_SKILL_MELEE, ile)
elseif (skillid == 2) then
setCondituonParam(condition, CONDITION_PARAM_SKILL_FIST, ile)
elseif (skillid == 3) then
setConditionParam(condition, CONDITION_PARAM_SKILL_CLUB, ile)
elseif (skillid == 4) then
setConditionParam(condition, CONDITION_PARAM_SKILL_SWORD, ile)
elseif (skillid == 5) then
setConditionParam(condition, CONDITION_PARAM_SKILL_AXE, ile)
elseif (skillid == 6) then
setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCE, ile)
elseif (skillid == 7) then
setConditionParam(condition, CONDITION_PARAM_SKILL_SHIELD, ile)
elseif (skillid == 8) then
setConditionParam(condition, CONDITION_PARAM_SKILL_FISHING, ile)
end
setCombatCondition(combat, condition)
function onCastSpell(cid, var)
return doCombat(cid, combat, var)
end
doSearchCreatureInRoom:
Kod:
function onUse(cid, item, frompos, item2, topos)
local search = doSearchCreatureInRoom(500, 500, 600, 600, 7)
if (search == 0) then
doPlayerAddItem(cid, 1111, 1)
doPlayerSendTextMessage(cid,22,"Na tych pozycjach nie ma zadnego stwora. Dostajesz item o id 1111.")
else
doPlayerSendTextMessage(cid,22,"Na tej pozycji jest jeszcze ".. search .." potworow.")
end
end
Mam nadzieję, że funkcje okażą się pomocne. Zostały testowane i działały.
Offline