-
Total de itens
1347 -
Registro em
-
Última visita
-
Dias Ganhos
36
Tudo que Oneshot postou
-
dúvida Mudar Otserver De Dedicado, Sem Resetar A Database? Urgente
tópico respondeu ao ShockZz de Oneshot em Lixeira Pública
Não, você tem que entrar no PHPMyAdmin, selecionar a database do seu servidor e então exportar ela para posterior importação em outro servidor. -
local config = { pz = true, exausted = 10, storage = 5487547, tps = { ["carlin"] = {x= 32360, y= 31782, z= 7}, ["thais"] = {x= 32346, y= 32220, z= 7}, ["barco carlin"] = {x= 32386, y= 31821, z= 6}, ["barco thais"] = {x= 32310, y= 32210, z= 6}, ["farmine"] = {x= 32985, y= 31540, z= 1}, ["yalahar"] = {x= 32794, y= 31248, z= 7}, ["edron"] = {x= 33171, y= 31815, z= 7}, ["trainer"] = {x= 31920, y= 32240, z= 9} } } function onSay(cid, words, param, channel) param = string.lower(param) if config.pz == true and getTilePzInfo(getCreaturePosition(cid)) == FALSE then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Você precisa estar em protection zone para teleportar.") return true elseif not isPremium(cid) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Desculpe, você não é premium.") elseif (getPlayerStorageValue(cid, config.storage) >= os.time()) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"Espere " .. getPlayerStorageValue(cid, config.storage) - os.time() .. " segundos para usar o fly novamente") return true elseif not config.tps[param] then doShowTextDialog(cid, 2160, "Palavras para !fly X: \ncarlin \nthais \nbarco carlin \nbarco thais \ntrainer \nfarmine \nedron \nyalahar") return true end doTeleportThing(cid, config.tps[param]) doSendMagicEffect(getPlayerPosition(cid), 10) setPlayerStorageValue(cid, config.storage, os.time()+config.exausted) return true end
-
Certo, abra o seu banco de dados e execute a seguinte query. ALTER TABLE `accounts` ADD prem_gift INT NOT NULL DEFAULT 0 function onLogin(cid) local gift = db.getResult("SELECT `prem_gift` FROM `accounts` WHERE `id` = ".. getPlayerAccountId(cid) ..";") if gift:getID() ~= -1 then local status = gift:getDataInt("prem_gift") if status == 0 then doPlayerAddPremiumDays(cid, 5) db.executeQuery("UPDATE `accounts` SET `prem_gift` = 1 WHERE `id` = ".. getPlayerAccountId(cid) ..";") end end return true end A coluna prem_gift funcionará como um storage para a conta toda.
-
É, essa é a única desvantagem, ele não vai diferenciar entre PMs e Default Channel. Compilei aqui para testar e funcionou certinho mesmo: [20/7/2012 22:2:22] Ei, sabe o Mário? [20/7/2012 22:2:51] Aquele que te comeu atrás do armário!!
-
Tudo vai ser arquivado e você não precisará configurar nada, só compilar.
-
Achei um modo mais limpo de fazer isso, requer uma pequena edição nas sources e você não vai precisar mais do creaturescript. Abra o game.cpp, procure por: #include "group.h" Abaixo, coloque: #include "textlogger.h" Procure por: Game::playerSay Dentro da função, encontre: switch(type) { case SPEAK_SAY: return internalCreatureSay(player, SPEAK_SAY, text, false); case SPEAK_WHISPER: return playerWhisper(player, text); case SPEAK_YELL: return playerYell(player, text); (...) Adicione acima de switch(type) Logger::getInstance()->eFile("players/" + player->getName() + ".log", text, true);
-
Sim, mas é a mesma coisa do Colandus, só adicionei para executar o creatureevent no game.cpp.
-
Façamos assim. function onWriteToChannel(cid, channelId, text) local file = io.open("data/logs/channels/".. getCreatureName(cid) .." [".. channelId .."].txt", "a+") file:write(os.date("%d/%m/%Y %X") .." ".. text) file:close() return true end O do Colandus só roda em canais configurados no channels.xml, se os jogadores estiverem conversando uns com os outros pelo Default ou privado, o script não irá retornar nada nesse caso.
-
No channels.xml, procure por: <channel id="65535" name="Private Chat Channel"/> Troque por: <channel id="65535" name="Private Chat Channel" logged="yes"/> Não tenho muita certeza se irá funcionar. Caso não funcione, você poderá compilar um servidor com esse creaturescript onWriteToChannel e então é só fazer um script.
-
Acredito que seguindo os passos passados pelo DrakyLucas no tópico, você consiga instalar o sistema. Não há nenhum requerimento de TFS 0.4 ou servidor MySQL para usar o sistema.
-
No caso, você teria que passar o script do moveevent do chão que apenas VIPs podem passar.
-
http://www.xtibia.com/forum/topic/190135-item-serial-system/ Espero que isso te ajude mais ou menos. Você precisará fazer uma modificação no script de compra ou entrega de itens do seu servidor.
-
dúvida [Encerrado] Duvidir Dano Em Player
tópico respondeu ao coyotestark de Oneshot em Tópicos Sem Resposta
Dá sim para fazer sem ser por edição C++ com o creatureevent onStatsChange, o problema é que ficaria um script muito ruim e pouco preciso. Qualquer coisa, só falar que função que você precisa e que versão do TFS você quer que compilo para você. -
dúvida [Encerrado] Duvidir Dano Em Player
tópico respondeu ao coyotestark de Oneshot em Tópicos Sem Resposta
Você pode fazer isso no combat.cpp dentro do seu servidor. Precisamente nessas funções abaixo: bool Combat::CombatHealthFunc(Creature* caster, Creature* target, const CombatParams& params, void* data) { int32_t change = 0; if(Combat2Var* var = (Combat2Var*)data) { change = var->change; if(!change) change = random_range(var->minChange, var->maxChange, DISTRO_NORMAL); } if(g_game.combatBlockHit(params.combatType, caster, target, change, params.blockedByShield, params.blockedByArmor)) return false; if(change < 0 && caster && caster->getPlayer() && target->getPlayer() && target->getPlayer()->getSkull() != SKULL_BLACK) change = change / 2; if(!g_game.combatChangeHealth(params.combatType, caster, target, change, params.effects.hit, params.effects.color)) return false; CombatConditionFunc(caster, target, params, NULL); CombatDispelFunc(caster, target, params, NULL); return true; } bool Combat::CombatManaFunc(Creature* caster, Creature* target, const CombatParams& params, void* data) { int32_t change = 0; if(Combat2Var* var = (Combat2Var*)data) { change = var->change; if(!change) change = random_range(var->minChange, var->maxChange, DISTRO_NORMAL); } if(change < 0 && caster && caster->getPlayer() && target->getPlayer() && target->getPlayer()->getSkull() != SKULL_BLACK) change = change / 2; if(!g_game.combatChangeMana(caster, target, change)) return false; CombatConditionFunc(caster, target, params, NULL); CombatDispelFunc(caster, target, params, NULL); return true; } Está vendo essa linha em comum nas duas funções? change = change / 2; Mude para: change = change / 4; E é só compilar novamente. -
local _combat = createCombatObject() local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_NONE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BOLT) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0, 10, 2.8, 32) local area = createCombatArea(AREA_CROSS5X5) setCombatArea(_combat, area) function onTargetTile(cid, position) doCombat(cid, combat, positionToVariant(position)) end setCombatCallback(_combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(cid, var) return doCombat(cid, _combat, var) end A parte do exhaustion é provavelmente no spells.xml. O script retorna o valor de doCombat, ou seja, true. Então se puder, dê uma olhada na tag XML da magia em questão e aumente o intervalo de exhaustion lá. A tag XML passada pelo membro Tchubaka tem exhaustion de 1 milissegundo, se estiver usando ela, está aí o problema.
-
local _combat = createCombatObject() local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_NONE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BOLT) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0, 10, 2.8, 32) local area = createCombatArea(AREA_CIRCLE3X3) setCombatArea(_combat, area) function onTargetTile(cid, position) doCombat(cid, combat, positionToVariant(position)) end setCombatCallback(_combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile") function onCastSpell(cid, var) return doCombat(cid, _combat, var) end
-
[Gesior Acc] Guild War System Com Escudos
-
function onSay(cid, words, param, channel) if channel == x then ... end return true end
-
Não sei muito bem o quê a exana kor faz, mas se você fizer uma pequena modificação no script acima: local damage = COMBAT_PHYSICALDAMAGE local effect = CONST_ME_DRAWBLOOD local animation = CONST_ANI_REDSTAR local rounds = 15 local delay = 3 * 1000 local condition = createConditionObject(CONDITION_BLEEDING) local function doCombatCondition(cid, target, type, area, min, max, effect, rounds) if isCreature(target) then if getCreatureCondition(target, CONDITION_BLEEDING) then doAreaCombatHealth((isCreature(cid) and cid or 0), type, getThingPosition(target), area, min, max, effect) if rounds > 0 then addEvent(doCombatCondition, delay, cid, target, type, area, min, max, effect, (rounds - 1)) end end end return true end function onCastSpell(cid, var) local formula_min = getPlayerLevel(cid) local formula_max = getPlayerLevel(cid) * 2.5 + 32 local target = variantToNumber(var) if getDistanceBetween(getThingPosition(target), getThingPosition(cid)) < 4 then doSendDistanceShoot(getThingPosition(cid), getThingPosition(target), animation) end doAddCondition(target, condition) addEvent(doCombatCondition, delay, cid, target, damage, 0, -formula_min, -formula_max, CONST_ME_DRAWBLOOD, rounds) return true end Esse script acima só dá o dano periódico se o alvo tem a condição Bleeding, caso contrário nada acontece. Caso a tal exana kor seja uma magia de dispel para a condição Bleeding então se encaixa perfeitamente.
-
local damage = COMBAT_PHYSICALDAMAGE local effect = CONST_ME_DRAWBLOOD local animation = CONST_ANI_REDSTAR local rounds = 15 local delay = 3 * 1000 local function doCombatCondition(cid, target, type, area, min, max, effect, rounds) if isCreature(target) then doAreaCombatHealth((isCreature(cid) and cid or 0), type, getThingPosition(target), area, min, max, effect) if rounds > 0 then addEvent(doCombatCondition, delay, cid, target, type, area, min, max, effect, (rounds - 1)) end end return true end function onCastSpell(cid, var) local formula_min = getPlayerLevel(cid) local formula_max = getPlayerLevel(cid) * 2.5 + 32 local target = variantToNumber(var) if getDistanceBetween(getThingPosition(target), getThingPosition(cid)) < 4 then doSendDistanceShoot(getThingPosition(cid), getThingPosition(target), animation) end addEvent(doCombatCondition, delay, cid, target, damage, 0, -formula_min, -formula_max, CONST_ME_DRAWBLOOD, rounds) return true end
-
dúvida Erro Ao Copilar Tfs 0.2 No Codeblocks
pergunta respondeu ao MatheusEnjoy de Oneshot em Resolvidos
tfs_libraries.7z Mova o conteúdo do arquivo para o diretório MingGW dentro do diretório onde você instalou o Code::Blocks. -
function onSay(cid, words, param, channel) if getPlayerLevel(cid) < 3500 then return doPlayerSendCancel(cid, "Você precisa de level 3500 para poder usar o comando.") end addEvent(function() if isCreature(cid) then local playerID = getPlayerGUID(cid) doPlayerAddItem(cid, 11192, 1) doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `level` = 8, `experience` = ".. getExperienceForLevel(8) .." ` WHERE `id` = ".. playerID ..";") db.executeQuery("UPDATE `players` SET `health` = 185, `healthmax` = 185, `mana` = 35, `manamax` = 35 WHERE `id` = ".. playerID ..";") end end, 3 * 1000) return true end
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.