Ir para conteúdo
  • Cadastre-se

player nao perde item quando morre e muito mais! o/


Posts Recomendados

oi gente de novo xD

 

Como vcs ja sabem, eu to com um server 10.76 usando TFS 1.0. Eu nao paro de encontrar problemas, e quando eu nao consigo resolver venho aqui suplicar pela ajuda dos veteranos.

 

Bem... Agora quando um player morre ele nao perde nada NUNCA (item) sem aol, e se ele nao tiver mochila nem bag nem nada q segure item, ele re aparece com uma mochila, como assim!? ainda ganha uma backpack gratis? Alguem me ajuda, por favor... sou noob =(

 

acho que esse eh o script de morte. Estava na pasta "creaturescripts"

 

local deathListEnabled = true

local maxDeathRecords = 5
 
function onDeath(cid, corpse, killer, mostDamage, unjustified, mostDamage_unjustified)
local player = Player(cid)
 
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You are dead.")
if player:getStorageValue(cid, 1101) > 0 then
player:setStorageValue(1101, 0)
end
 
if not deathListEnabled then
return
end
 
local byPlayer = 0
local killerCreature = Creature(killer)
if killerCreature == nil then
killerName = "field item"
else
if killerCreature:isPlayer() then
byPlayer = 1
else
local master = killerCreature:getMaster()
if master and master ~= killerCreature and master:isPlayer() then
killerCreature = master
byPlayer = 1
end
end
killerName = killerCreature:getName()
end
 
local byPlayerMostDamage = 0
if mostDamage == 0 then
mostDamageName = "field item"
else
local mostDamageKiller = Creature(mostDamage)
if mostDamageKiller:isPlayer() then
byPlayerMostDamage = 1
else
local master = mostDamageKiller:getMaster()
if master and master ~= mostDamageKiller and master:isPlayer() then
mostDamageKiller = master
byPlayerMostDamage = 1
end
end
mostDamageName = mostDamageKiller:getName()
end
 
local playerGuid = player:getGuid()
db.query("INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`, `is_player`, `mostdamage_by`, `mostdamage_is_player`, `unjustified`, `mostdamage_unjustified`) VALUES (" .. playerGuid .. ", " .. os.time() .. ", " .. player:getLevel() .. ", " .. db.escapeString(killerName) .. ", " .. byPlayer .. ", " .. db.escapeString(mostDamageName) .. ", " .. byPlayerMostDamage .. ", " .. unjustified .. ", " .. mostDamage_unjustified .. ")")
local resultId = db.storeQuery("SELECT `player_id` FROM `player_deaths` WHERE `player_id` = " .. playerGuid)
 
local deathRecords = 0
local tmpResultId = resultId
while tmpResultId ~= false do
tmpResultId = result.next(resultId)
deathRecords = deathRecords + 1
end
 
if resultId ~= false then
result.free(resultId)
end
 
while deathRecords > maxDeathRecords do
db.query("DELETE FROM `player_deaths` WHERE `player_id` = " .. playerGuid .. " ORDER BY `time` LIMIT 1")
deathRecords = deathRecords - 1
end
 
if byPlayer == 1 then
local playerGuild = player:getGuild()
if playerGuild then
local killerGuild = killerCreature:getGuild()
if playerGuild ~= killerGuild and isInWar(cid, killerCreature) then
local warId = false
resultId = db.storeQuery("SELECT `id` FROM `guild_wars` WHERE `status` = 1 AND ((`guild1` = " .. killerGuild:getId() .. " AND `guild2` = " .. playerGuild:getId() .. ") OR (`guild1` = " .. playerGuild:getId() .. " AND `guild2` = " .. killerGuild:getId() .. "))")
if resultId ~= false then
warId = result.getDataInt(resultId, "id")
result.free(resultId)
end
 
if warId ~= false then
db.query("INSERT INTO `guildwar_kills` (`killer`, `target`, `killerguild`, `targetguild`, `time`, `warid`) VALUES (" .. db.escapeString(killerName) .. ", " .. db.escapeString(player:getName()) .. ", " .. killerGuild:getId() .. ", " .. playerGuild:getId() .. ", " .. os.time() .. ", " .. warId .. ")")
end
end
end
end
end

Link para o post
Compartilhar em outros sites

ok, segue o bagulho que vc pediu

 

<?xml version="1.0" encoding="UTF-8"?>

<creaturescripts>
 
<!-- Secret Service Quest -->
<event type="kill" name="SecretServiceBlackKnight" script="others/blackKnight.lua"/>
 
<!-- Spike Task: Drillworm -->
<event type="kill" name="SpikeDrillworm" script="spike task/drillworm.lua"/>
 
<!-- Thieves Guild Quest -->
<event type="kill" name="ThievesGuildNomad" script="others/nomad.lua"/>
 
<!-- Pythius The Rotten -->
<event type="kill" name="pythiusDead" script="pythius the rotten/pythiusDead.lua" />
 
<!-- Gray Island -->
<event type="kill" name="bossesGrayIsland" script="gray island/bossesgrayisland.lua"/> 
 
<!-- The Elemental Spheres -->
<event type="death" name="ElementalSpheres" script="elemental spheres quest/the_elemental_spheres.lua"/>
<event type="kill" name="ElementalSpheresKill" script="elemental spheres quest/the_elemental_spheres.lua"/>
<event type="login" name="ElementalSpheresLogin" script="elemental spheres quest/the_elemental_spheres.lua"/>
 
<!-- Gnomebase -->
<event type="kill" name="WarzoneTwo" script="gnomebase/warzone2.lua"/>
<event type="kill" name="WarzoneThree" script="gnomebase/warzone3.lua"/>
<event type="kill" name="bossesWarzone" script="gnomebase/bossesWarzone.lua"/> 
 
<!-- Svargrond Arena: Killing a boss -->
<event type="kill" name="SvargrondArenaKill" script="svargrond arena quest/arena_kill.lua"/>
 
<!-- Pharaos: Portal to reward room -->
<event type="kill" name="PharaoKillPortal" script="others/pharaoPortal.lua"/>
 
<!-- In Service Of Yalahar Quest -->
<event type="kill" name="inServiceOfYalaharQuestsDiseased" script="in service of yalahar quest/inServiceOfYalaharQuestsDiseased.lua"/>
<event type="kill" name="inServiceOfYalaharQuestsMorik" script="in service of yalahar quest/inServiceOfYalaharQuestsMorik.lua"/>
<event type="kill" name="inServiceOfYalaharQuestsQuara" script="in service of yalahar quest/inServiceOfYalaharQuestsQuara.lua"/>
 
<!-- Inquisition Quest -->
<event type="kill" name="inquisitionQuestBosses" script="inquisition quest/inquisitionQuestBosses.lua"/>
<event type="kill" name="inquisitionQuestUngreez" script="inquisition quest/inquisitionQuestUngreez.lua"/>
 
<!-- Killing In The Name Of Quest -->
<event type="kill" name="killingInTheNameOfQuestKills" script="killing in the name of quest/killingInTheNameOfQuestKills.lua"/>
<event type="kill" name="TaskCustom" script="killing in the name of quest/taskcustom.lua"/>
 
<!-- Raging Mage Tower -->
<event type="kill" name="Yielothax" script="raging mage tower/yielothax.lua"/>
<event type="kill" name="Energized" script="raging mage tower/energized.lua"/>
<event type="kill" name="Raging" script="raging mage tower/raging.lua"/>
 
<!-- The Masters Voice Quest -->
<event type="kill" name="MastersVoiceServants" script="their master's voice quest/ServantsKill.lua"/>
 
<!-- Wrath of Emperor -->
<event type="kill" name="wrathBoss" script="wrath of the emperor quest/wrathOfTheEmperorQuestBoss.lua"/>
<event type="kill" name="wrathZalamon" script="wrath of the emperor quest/wrathOfTheEmperorQuestZalamon.lua"/>
 
<!-- Others -->
<event type="logout" name="Cast" script="others/cast.lua"/>
<event type="login" name="PlayerLogin" script="others/login.lua"/>
<event type="death" name="PlayerDeath" script="others/playerdeath.lua"/>
<event type="advance" name="AdvanceSave" script="others/advance_save.lua"/>
<event type="advance" name="AdvanceRook" script="others/advance_rook.lua"/>
<event type="advance" name="Recompense" script="others/recompense.lua"/>
<event type="login" name="AddonsMounts" script="others/addons-montarias.lua"/>
<event type="login" name="FirstItems" 
script="others/firstitems.lua"/>
 
</creaturescripts>

Link para o post
Compartilhar em outros sites

kra, o advance rook nao tem nada a ver...

local config = {

level1 = 8,     
msg1 = "Congratulations! You are ready to leave this island and choose a vocation now. Go see the Oracle over the academy in Rookgaard before you advance to level 10!", 
msgtype = MESSAGE_EVENT_ADVANCE,
}
 
function onAdvance(cid, oldLevel, newLevel)
if getPlayerLevel(cid) >= config.level1 and getPlayerStorageValue(cid,655) ~= 1 then
setPlayerStorageValue(cid,655,1)
doPlayerSendTextMessage(cid, config.msgtype, config.msg1)
end
return TRUE
end

Nao tem nenhuma gambiarra que eu possa fazer pra forçar uma regra de pena de morte?
Link para o post
Compartilhar em outros sites

Pensei que era algum script a ver com protection level, devido ao "rook". Pra mim, é algum scritp lowlevelprotection que tem no creaturescripts. Creio eu que não entendi muito bem qual é o problema.. se o player morrer, em qualquer level, ele não perde nada?

horizontallogowhite1.png

Link para o post
Compartilhar em outros sites

eu editei um player para testar isso, e num lvl alto eles começam a perder a mochila (container) mas NUNCA perdem algo dos equips.... e Mesmo assim nascem com uma nova mochila.

 

Eu queria que tivesse chance de perde equip e voltasse com uma bag bosta ou nada como nos tempo antigos.... E não sei mais como fazer isso, antigamente ficava no config.lua, nem no login.lua ta tbm, não achei nada que tenha "losspercentage"

Link para o post
Compartilhar em outros sites

Sobre a bag, fica aqui no config, nessa parte:

deathContainerId = 1987

1987 é o ID do Container que vai dar quando morrer, 1987 é a famosa bag.

 

Posta seu config.lua pra eu dar uma olhada.

Editado por thiagobji (veja o histórico de edições)

horizontallogowhite1.png

Link para o post
Compartilhar em outros sites

 
worldType = "pvp"
hotkeyAimbotEnabled = "yes"
protectionLevel = 8
killsToRedSkull = 5
killsToBlackSkull = 8
pzLocked = 60000
removeAmmoWhenUsingDistanceWeapon = "yes"
removeChargesFromRunes = "yes"
timeToDecreaseFrags = 8 * 60 * 60 * 1000
whiteSkullTime = 15 * 60 * 1000
stairJumpExhaustion = 2000
experienceByKillingPlayers = "no"
 
 
ip = "mabinoti.no-ip.org"
bindOnlyGlobalAddress = "no"
loginProtocolPort = 7171
gameProtocolPort = 7172
statusProtocolPort = 7171
maxPlayers = "1000"
motd = "Welcome to MabinOTI!"
onePlayerOnlinePerAccount = "yes"
allowClones = "no"
serverName = "Mabi"
statusTimeout = 60000
replaceKickOnLogin = "yes"
maxPacketsPerSecond = 300
pushCreatureDelay = 1 * 1000
 
 
deathLosePercent = 3
 
 
housePriceEachSQM = 10000
houseRentPeriod = "never"
 
 
timeBetweenActions = 200
timeBetweenExActions = 1000
 
 
mapName = "realmap"
mapAuthor = "Mabi"
 
 
marketOfferDuration = 30 * 24 * 60 * 60
premiumToCreateMarketOffer = "yes"
checkExpiredMarketOffersEachMinutes = 60
maxMarketOffersAtATimePerPlayer = 100
 
mysqlHost = "127.0.0.1"
mysqlUser = "censored"
mysqlPass = "censored"
mysqlDatabase = "global"
mysqlPort = 3306
mysqlSock = ""
passwordType = "sha1"
 
allowChangeOutfit = "yes"
freePremium = "no"
kickIdlePlayerAfterMinutes = 10
maxMessageBuffer = 4
noDamageToSameLookfeet = "no"
emoteSpells = "no"
 
 
rateExp = 20
rateSkill = 300
rateLoot = 2
rateMagic = 30
rateSpawn = 1
 
 
deSpawnRange = 2
deSpawnRadius = 50
 
 
staminaSystem = "no"
 
 
defaultPriority = "realtime"
startupDatabaseOptimization = "no"
 
ownerName = ""
ownerEmail = ""
location = "Canada"

 
nao tem "deathconteiner" no config soh tem a porcentagem de xp que perde na morte...
Link para o post
Compartilhar em outros sites

O tópico foi movido para a área correta, preste mais atenção da próxima vez!

Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680

Este tópico foi movido:

De: "OTServSuporte OTServSuporte de OTServ Geral"

Para: "OTServSuporte OTServSuporte de Scripts"

Link para o post
Compartilhar em outros sites

Vish, eu jurava que estava na certa... Erro de interpretação? Desculpa ae! D=

 

Mas eu ainda nao consegui resolver meu problema, TFS 1.0 não tem dosetlosspercent?


BUMP

 

Desculpa por "bumpar", mas ja faz 4 dias que estou vasculhando toda a internet e os scripts na pasta do OT tentando resolver isso e não consigo... Tudo que eu queria era que depois da morte, o player voltasse com uma bag e não uma backpack, e se não estiver usando AOL ele tenha uma certa % de chance de perder cada equip. morrer sem riscos não tem graça, quero que meus players tenham medo de morrer, isso da uma verdadeira gameplay tanto pra Co-Op quanto PvP....

 

meu OT eh esse aqui >> http://www.tibiaking.com/forum/topic/36403-global-full-1076-tfs-10-full-oramond-cast-system-atualiza%C3%A7%C3%A3o-v10/

 

Se tiverem tempo, deem uma olhada na pasta "data" e me digam se encontraram algo que relacione com penalidade de morte, pois eu não encontrei nada, mas sou noobizin... Obrigado gente.

Link para o post
Compartilhar em outros sites
  • 3 months later...

Vá na pasta da source do seu server e abra o arquivo "player.cpp", procure por:

if (playerSkull == SKULL_RED || playerSkull == SKULL_BLACK || uniform_random(1, (item->getContainer() ? 100 : 100000)) <= getDropPercent()

Modifique para:

if (playerSkull == SKULL_RED || playerSkull == SKULL_BLACK || uniform_random(1, (item->getContainer() ? 100 : 1000)) <= getDropPercent()

Assim ficará a perca dos items igual/parecida do global, cerca de 10% de chance de perca de itens.

Após essa modificação é necessário recompilar seu server para que a modificação entre em funcionamento.

 

 

Obs: Desculpe pelo double post, achei que conseguiria deletar o meu post anterior.

Editado por polooix (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 2 weeks later...

Uma curiosidade, o char tem vocação? pois se não tiver vocação ele jamais irá perder os items ou qualquer coisa do tipo.. caso esse seja o problema vá no arquivo droploot.lua que fica na pasta data\creaturescripts\scripts e altere essa linha

if getPlayerFlagValue(player, PlayerFlag_NotGenerateLoot) or player:getVocation():getId() == VOCATION_NONE then
        return true
    end 

para

if getPlayerFlagValue(player, PlayerFlag_NotGenerateLoot) then
return true
end

Essa parte 

or player:getVocation():getId() == VOCATION_NONE 

faz char sem vocação não perder loot algum, é só remover..
 

Espero ter ajudado :)

Editado por DkAngel83 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Olá, se ainda não tiver resolvido, tente dessa maneira.

 

Creaturescript, crie um lua

 

droploot.lua e adicione isto.

 

function onDeath(player, corpse, killer, mostDamage, unjustified, mostDamage_unjustified)
	if getPlayerFlagValue(player, PlayerFlag_NotGenerateLoot) or player:getVocation():getId() == VOCATION_NONE then
		return true
	end

	local amulet = player:getSlotItem(CONST_SLOT_NECKLACE)
	if amulet and amulet.itemid == ITEM_AMULETOFLOSS and not isInArray({SKULL_RED, SKULL_BLACK}, player:getSkull()) then
		local isPlayer = false
		if killer:isPlayer() then
			isPlayer = true
		else
			local master = killer:getMaster()
			if master and master:isPlayer() then
				isPlayer = true
			end
		end

		if not isPlayer or not player:hasBlessing(6) then
			player:removeItem(ITEM_AMULETOFLOSS, 1, -1, false)
		end
	else
		for i = CONST_SLOT_HEAD, CONST_SLOT_AMMO do
			local item = player:getSlotItem(i)
			if item then
				if isInArray({SKULL_RED, SKULL_BLACK}, player:getSkull()) or math.random(item:isContainer() and 100 or 1000) <= player:getLossPercent() then
					if not item:moveTo(corpse) then
						item:remove()
					end
				end
			end
		end
	end

	if not player:getSlotItem(CONST_SLOT_BACKPACK) then
		player:addItem(ITEM_BAG, 1, false, CONST_SLOT_BACKPACK)
	end
	return true
end

 

registre em login.

player:registerEvent("DropLoot")

adicione isto em xml.

	<event type="death" name="DropLoot" script="droploot.lua"/>

espero respostas.

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo