Why does my goldCollected tracker go up, and lightstoneCollected tracker does not?
It’s essentially the same code. As the player picks up a coin, I get a message: Look what I've got! gold-coin . But when a lightstone is picked up, no messages, as if there was no collect event.
.
var hero=game.spawnPlayerXY("samurai", 34, 8);
game.lightstoneCollected = 0;
ui.track(game, "lightstoneCollected");
game.goldCollected = 0;
ui.track(game, "goldCollected");
game.spawnXY("lightstone", 50, 50);
game.spawnXY("gold-coin", 60, 40);
function onCollect(event){
var item=event.other;
hero.say("Look what I've got! " + item.type);
if (item.type=="lightstone"){
game.lightstoneCollected+=1;
}
if (item.type=="gold-coin"){
game.goldCollected+=1;
}
}
hero.on("collect", onCollect);
I tested the code with an game.addCollectGoal(); and I realised that the lightstone is not an item.So do not use onCollect, because onCollect is only for items.
I also tested with “collide” instead of “collect” but it does not work either.
Do you understand?
Thank you! I’m at Game Dev 2 Final Project, so I guess I see what you mean. I thought the item type was wrong, like treasure chest type is “gem”, not “chest”.
It should be possible to indicate that a lightstone has been picked up if the two conditions are true:
lightstone has been spawn
player has stepped on an x-mark located at the lightstone coordinates
Here is the solution on how I tracked if the lightstone was spawn, collected and expired. I used a munchkin defeat to spawn a lightstone with a delay. Whatever entity the lightstone is, it’s possible to set actions for it.
var hero=game.spawnPlayerXY("samurai", 10, 20);
var lightX=game.spawnXY("x-mark-bones", 30, 40);
game.spawnXY("munchkin", 20, 30);
var lightExists=false;
game.lightstoneCollected = 0;
ui.track(game, "lightstoneCollected");
var lightDuration=6;
var lightEnd=0;
function onDefeat(event){
game.spawnXY("lightstone", 30, 40);
lightExists=true;
}
function checkLight(event){
while(true){
if (lightExists === true && hero.distanceTo(lightX) < 3 && lightEnd ===0){
game.lightstoneCollected = 1;
hero.say("I've got Light!");
lightEnd=game.time+lightDuration;
}
if (lightEnd < game.time && game.lightstoneCollected === 1) {
lightExists=false;
hero.say("Ooops, no Light!");
}
}
}
game.setActionFor("lightstone", "spawn", checkLight);
game.setActionFor("munchkin", "defeat", onDefeat);