({ deadEntity, damageSource }) => {
const health = deadEntity.getComponent('minecraft:health')
if (health.currentValue > 0) return;
if (!(damageSource.damagingEntity instanceof Player)) return
damageSource.damagingEntity.sendMessage(`killed something`)
damageSource.damagingEntity.runCommand(`scoreboard players add @s xp 10`)
}
)``` would this be a efficient way to give xp/score when killing certain mobs
#Xp system
1 messages · Page 1 of 1 (latest)
import { Player, world } from "@minecraft/server";
world.afterEvents.entityDie.subscribe((eventData) => {
const killedEntity = eventData.deadEntity;
const player = eventData.damageSource.damagingEntity;
if (player instanceof Player) {
player.sendMessage(`killed smth`);
let previousScore = 0;
try { return player.scoreboardIdentity.getScore(world.scoreboard.getObjective("xp"));
} catch {};
player.scoreboardIdentity.setScore(world.scoreboard.getObjective("xp"), previousScore + 10);
};
return;
});
No Errors
No errors in [code](#1120346958536659054 message)
thank you. should i have a setscore function?
ye sure
give me a minute
setScore(entity, objective, number = 0) {
if (world.scoreboard.getObjectives().filter(filter => filter.id == objective).length == 0) return false;
const scoreboardEntityArgument = entity.scoreboardIdentity;
world.scoreboard.getObjective(objective).setScore(scoreboardEntityArgument, number);
return true;
};
it's for entites
and here is for fake players
setScore(partipicant, objective, number = 0) {
if (world.scoreboard.getObjectives().filter(filter => filter.id == objective).length == 0) return false;
world.getDimension('overworld').runCommandAsync(`scoreboard players set "${partipicant}" ${objective} ${number}`);
return true;
};
ty
np
do i just do if (player instanceof Player && killedEntity instanceof zombie)
nope
class Zombie doesn't exist
so no
oh what can i use?
if (player instanceof Player && killedEntity.typeId == 'minecraft:zombie') {
// ur code here
};
thanks
return system.runInterval(() => {
duration -= interval
if (duration < 0) return;
target.applyDamage(damage, { cause: EntityDamageCause.magic })
target.dimension.spawnParticle(`md:${particle}`, target.location, new MolangVariableMap)
}, interval)
}``` how do i use this to trigger the xp?
@fresh lagoon
import { world } from "@minecraft/server"
const entityPoints = {
"minecraft:zombie": {
points: () => random(14, 1)
}
};
globalThis.random = (a = 1, b = 0, c = true) => {
[a, b] = (a > b ? [a, b] : [b, a]), a = Math.random() * (a - b) + b;
return c ? Math.round(a) : a;
};
world.afterEvents.entityDie.subscribe(({ damageSource, deadEntity }) => {
const killer = damageSource.damagingEntity;
if (killer?.typeId !== 'minecraft:player') return;
const entityType = deadEntity.typeId;
if (entityType in entityPoints) {
const score = entityPoints[entityType].points();
killer.runCommandAsync(`scoreboard players add @s Money ${score}`);
killer.playSound(`random.orb`)
killer.sendMessage(`§6${score}`)
}
});
what does that do
generates a random score under the list that you put default is zombie 1 to 14 it generates
that's very complicated for a Math.floor(Math.random() * maxNum)
it really isnt
oh i see, the thing has a minimum and max value
you're swapping the variables values if the first one is greater than the second one
what does globalThis do
?
@carmine river
how can i have multiple variants? e.g lvl 1 zombie and lvl 20 zombie
#1103539365344460951 message
yeah i understand it
const entityPoints = {
'minecraft:zombie': {
get 0() { return random(1, 10) },
get 2() { return random(11, 15) },
get 3() { return random(16, 20) },
get 4() { return random(21, 30) },
get 5() { return random(31, 50) }
}
}
how does this work?
world.afterEvents.entityDie.subscribe(({ damageSource, deadEntity }) => {
const killer = damageSource.damagingEntity;
if (killer?.typeId !== 'minecraft:player') return;
const entityType = deadEntity.typeId;
if (entityType in entityPoints) {
const score = entityPoints[entityType][level] ?? 0;/*input the level here*/
killer.runCommandAsync(`scoreboard players add @s Money ${score}`);
killer.playSound(`random.orb`)
killer.sendMessage(`§6${score}`)
}
});```
what can i use to define the entity level? im currently just using names but that doesn't work
scoreboard?
oh lmao and then getscore in the [level] part?
yes
oo what do i have to do?
getEquipment then check for what armor it is and check for enchantments, its a hell'a'lot of coding
fr
oh maybe in the future lol. thank you
whats this called?