weapon shops on wall, nodl zombies, mp_carentan example files
	
	
		mp_carentan.gsc
	PHP Code:
	
// something is going wrong.
// the bot isnt linked to the helper
// maybe a wait 0.05 is missing ("let it happen")
spawnPopulationBots()
{
    helper = spawn("script_origin", (57,1909,68));
    for (i=0; i<1; i++)
    {
        bot = addTestClient();
        bot spawn(helper.origin, (0,0,0));
        bot.isBot = 1;
        bot linkTo(helper);
    }
}
main()
{
    maps\mp\_load::main();
    ambientPlay("ambient_france");
    game["allies"] = "american";
    game["axis"] = "german";
    game["attackers"] = "allies";
    game["defenders"] = "axis";
    game["american_soldiertype"] = "normandy";
    game["german_soldiertype"] = "normandy";
    // the bugged spawn near (-11,684,206)
    mod\UTILS::deleteEntityByClassnameAndId("mp_dm_spawn", 279);
    mod\INTERFACE::startMod();
    mod\INTERFACE::createShop((1768, 818, 36), 134);
    mortar1 = mod\INTERFACE::addMortar( (-208,1798,206), 119);
    mortar1 mod\INTERFACE::addMortarTarget( (-588,2308,102) );
    mortar2 = mod\INTERFACE::addMortar( (1696,2116,36), 198);
    mortar2 mod\INTERFACE::addMortarTarget( (1126,1987,20) );
    mortar3 = mod\INTERFACE::addMortar( (1734,1868,36), 247);
    mortar3 mod\INTERFACE::addMortarTarget( (1578,1339,28) );
    mod\INTERFACE::addMortarAmmo((-811,2527,34), 316);
    mod\INTERFACE::addMortarAmmo((1932,1862,35), 139);
    //mod\INTERFACE::addRandomBox((1017,1181,-24+60), 357);
    mod\INTERFACE::shopTT30( (1798+18,1217,36), 180);
    mod\INTERFACE::shopGreaseGun( (1798+18,975,36), 180);
    mod\INTERFACE::shopKar98k( (1625,783-14,36), 90);
    // erster
    mod\INTERFACE::createTeleport( (656,448,274), (1484,943,458), "^9trigger #1", mod\UTILS::isHunter);
    // leichter jump
    mod\INTERFACE::createTeleport( (-472,2451,131), (1484,943,458), "^9trigger #2", mod\UTILS::isHunter);
    mod\INTERFACE::createTeleport( (-569,2546,110), (1484,943,458), "^9trigger #3", mod\UTILS::isHunter);
    mod\INTERFACE::createTeleport( (-518,2497,111), (1484,943,458), "^9trigger #4", mod\UTILS::isHunter);
    // schwerer jump
    mod\INTERFACE::createTeleport( (900,-951,100), (1484,943,458), "^9trigger #5", mod\UTILS::isHunter);
    mod\INTERFACE::createTeleport( (901,-1075,100), (1484,943,458), "^9trigger #6", mod\UTILS::isHunter);
    mod\INTERFACE::createTeleport( (900,-1022,120), (1484,943,458), "^9trigger #7", mod\UTILS::isHunter);
    mod\INTERFACE::createTeleport( (966,-936,128), (1484,943,458), "^9trigger #8", mod\UTILS::isHunter);
    // window links
    mod\INTERFACE::createTeleport( (1067,785,215), (1484,943,458), "^9trigger #9", mod\UTILS::isHunter);
    // window rechts
    mod\INTERFACE::createTeleport( (888,786,215), (1484,943,458), "^9trigger #10", mod\UTILS::isHunter);
    // hippys beschwerde 1
    mod\INTERFACE::createTeleport( (846,1721,197), (1484,943,458), "^9trigger #11", mod\UTILS::isHunter);
    // hippys beschwerde 1
    mod\INTERFACE::createTeleport( (944,1792,168), (1484,943,458), "^9trigger #12", mod\UTILS::isHunter);
    // we1n nade jump
    mod\INTERFACE::createTeleport( (989,3605,143), (1484,943,458), "^9trigger #13", mod\UTILS::isHunter);
    // god glitch (replaced by collision)
    // mod\INTERFACE::createTeleport( (-51,707,184), (1484,943,458), "^9trigger #13", mod\UTILS::isHunter);
    // two camp windows with nade or side-jump
    mod\INTERFACE::createTeleport( (1390,1584,214), (1484,943,458), "^9trigger #14", mod\UTILS::isHunter, 4);
    mod\INTERFACE::createTeleport( (1395,1704,214), (1484,943,458), "^9trigger #15", mod\UTILS::isHunter, 4);
    mod\INTERFACE::createRadio((1773,1353,36),269);
    // muster-code...
    // mod\interface::createCollision((,,),,); // 
    mod\interface::createCollision((-62,707,144),50,30); // hinter Komode
    //spawnPopulationBots();
    /*
    wait 5.00;
    //findIdOfBuggedSpawn():
    pointNearTheSpawn = (-11,684,206);
    spawns = getentarray("mp_dm_spawn", "classname");
    spawnNearest = spawns[0];
    spawnNearestDistance = distance(spawnNearest.origin, pointNearTheSpawn);
    for (i=1; i<spawns.size; i++)
    {
        distanceToThis = distance(spawns[i].origin, pointNearTheSpawn);
        if (distanceToThis < spawnNearestDistance)
        {
            spawnNearestDistance = distanceToThis;
            spawnNearest = spawns[i];
        }
    }
    iprintln("found the spawn: ", spawnNearest.origin, " id: ", spawnNearest getEntityNumber());
    */
} 
 interface.gsc
	PHP Code:
	
initVar(name, value)
{
    mod\INIT::initDefaultVar(name, value);
}
startMod(overwrite)
{
    mod\INIT::main();
}
createShop(pos, dir)
{
    thread mod\SHOP::createShop(pos, dir);
}
addBadPlace(discription, origin, radius, height)
{
    thread mod\BADPLACES::addBadPlace(discription, origin, radius, height);
}
addMortar(position, dir)
{
    mortar = mod\MORTAR::addMortar(position, dir);
    return mortar;
}
addMortarTarget(position)
{
    thread mod\MORTAR::addMortarTarget(position);
}
addMortarAmmo(position, dir)
{
    thread mod\MORTAR::addMortarAmmo(position, dir);
}
addRandomBox(pos, dir)
{
    //not implemented yet.
    thread mod\RANDOMBOX::addRandomBox(pos, dir);
}
createDefendBox(pos, dir)
{
    mod\DEFENDBOXES::createDefendBox(pos, dir);
}
createModel(name, position, angles)
{
    model = spawn("script_model", position);
    model.angles = angles;
    model setModel(name);
    return model;
}
/*
addBlocker(pos, size)
{
    blocker = spawn("script_origin", pos);
    blocker setbounds( (0,0,0)-size, size);
    blocker setcontents(1);
    //level.size = size;
    level.blocker = blocker;
    thread makeVis();
}
*/
createTeleport(from, to, message, callback, radius)
{
    mod\TELEPORT::createTeleport(from, to, message, callback, radius);
}
spawnSignTeddy(position, angle)
{
    mod\SIGNS::spawnSignTeddy(position, angle);
}
spawnSignMortar(position, angle)
{
    mod\SIGNS::spawnSignMortar(position, angle);
}
// methods of class "player"
addMoney(money)
{
    player = self;
    player mod\PLAYER::PLAYER_addMoney(money);
}
checkpointCreate(name, position)
{
    mod\CHECKPOINT::checkpointCreate(name, position);
}
checkpointConnect(from, to, material, givePrize)
{
    mod\CHECKPOINT::checkpointConnect(from, to, material, givePrize);
}
checkpointSetFirstCheckpoint(name, material, givePrice)
{
    mod\CHECKPOINT::checkpointSetFirstCheckpoint(name, material, givePrice);
}
shopTT30(pos, dir)
{
    mod\WEAPONSHOPS::shopTT30(pos, dir);
}
shopGreaseGun(pos, dir)
{
    mod\WEAPONSHOPS::shopGreaseGun(pos, dir);
}
shopKar98K(pos, dir)
{
    mod\WEAPONSHOPS::shopKar98K(pos, dir);
}
createRadio(pos, angle)
{
    mod\HINTRADIO::radioCreate(pos, angle-90);
}
createCollision(position, radius, height)
{
    coll = spawn("trigger_radius", position, 0, radius, height); // name, position, flags, radius, height
    coll setContents(1);
} 
 weaponshops.gsc
	PHP Code:
	
precache()
{
    game["shop_greasegun_hunter"] = &"^7Press ^8[^7[{+activate}]^8] ^7to buy a Greasegun ^8[^7600 coins^8]";
    game["shop_greasegun_zombie"] = &"zombies do not play with greaseguns^8... ^7:D";
    game["shop_tt30_hunter"] = &"^7Press ^8[^7[{+activate}]^8] ^7to buy a TT30 ^8[^7300 coins^8]";
    game["shop_tt30_zombie"] = &"zombies do not play with pistols^8... ^7:D";
    game["shop_kar98k_hunter"] = &"^7Press ^8[^7[{+activate}]^8] ^7to buy a M1 Carbine ^8[^7400 coins^8]";
    game["shop_kar98k_zombie"] = &"zombies do not play with carbines^8... ^7:D";
    precacheString(game["shop_greasegun_hunter"]);
    precacheString(game["shop_greasegun_zombie"]);
    precacheString(game["shop_tt30_hunter"]);
    precacheString(game["shop_tt30_zombie"]);
    precacheString(game["shop_kar98k_hunter"]);
    precacheString(game["shop_kar98k_zombie"]);
    precacheModel("xmodel/weapon_greasegun");
    precacheModel("xmodel/weapon_tt30");
    precacheModel("xmodel/weapon_m1carbine");
}
entityToWall(dir, distanceToWall)
{
    entity = self;
    forward = anglesToForward((0,dir,0));
    // to wall
    delta = mod\MATH::vecScale(forward, -1000);
    trace = bullettrace(entity.origin, entity.origin+delta, false, undefined);
    if (trace["fraction"] == 1)
        return;
    // delta from wall away...
    delta = mod\MATH::vecScale(forward, distanceToWall);
    entity.origin = trace["position"] + delta;
}
greasegun_buy(player)
{
    if (player.pers["team"] != "allies")
    {
        player iprintln("^7[^8NOTICE^7] zombies can't buy greaseguns");
        return;
    }
    if (player mod\PLAYER::getMoney() < 600)
    {
        player iprintln("^7[^8NOTICE^7] you don't have enough coins to purchase. You need ^8", 600, " ^7coins.");
        return;
    }
    //iprintln("current weapon: " + );
    //player giveWeapon("greasegun_mp");
    //player giveMaxAmmo("greasegun_mp");
    player setWeaponSlotWeapon("primary", "greasegun_mp");
    player giveMaxAmmo("primary");
    player giveMaxAmmo("primary");
    player giveMaxAmmo("primary");
    player giveMaxAmmo("primary");
    player switchToWeapon("greasegun_mp");
    player iprintln("^7[^8NOTICE^7] ^8greasegun purchased (price: ^8"+600+"^7)");
    player mod\PLAYER::subMoney(600);
    player playsound("weap_pickup");
}
shopGreaseGun(pos, dir)
{
    gun = mod\UTILS::spawnXmodel("xmodel/weapon_greasegun", pos, dir-90);
    gun entityToWall(dir, 2);
    gun thread mod\TRIGGER::spawnUseTrigger(
        ::greasegun_buy,
        game["shop_greasegun_hunter"],
        game["shop_greasegun_zombie"]
    );
    gun.trigger.origin += (0,0,-50);
}
kar98k_buy(player)
{
    if (player.pers["team"] != "allies")
    {
        player iprintln("^7[^8NOTICE^7] zombies can't buy carabines");
        return;
    }
    if (player mod\PLAYER::getMoney() < 400)
    {
        player iprintln("^7[^8NOTICE^7] you don't have enough coins to purchase. You need ^8", 400, " ^7coins.");
        return;
    }
    player setWeaponSlotWeapon("primary", "m1carbine_mp");
    player giveMaxAmmo("primary");
    player giveMaxAmmo("primary");
    player giveMaxAmmo("primary");
    player giveMaxAmmo("primary");
    player switchToWeapon("m1carbine_mp");
    player iprintln("^7[^8NOTICE^7] ^8M1 Carbine purchased (price: ^8"+400+"^7)");
    player mod\PLAYER::subMoney(400);
    player playsound("weap_pickup");
}
shopKar98k(pos, dir)
{
    gun = mod\UTILS::spawnXmodel("xmodel/weapon_m1carbine", pos, dir-90);
    gun entityToWall(dir, 2);
    gun thread mod\TRIGGER::spawnUseTrigger(
        ::kar98k_buy,
        game["shop_kar98k_hunter"],
        game["shop_kar98k_zombie"]
    );
    gun.trigger.origin += (0,0,-50);
}
tt30_buy(player)
{
    if (player.pers["team"] != "allies")
    {
        player iprintln("^7[^8NOTICE^7] zombies can't buy pistoles");
        return;
    }
    if (player mod\PLAYER::getMoney() < 300)
    {
        player iprintln("^7[^8NOTICE^7] you don't have enough coins to purchase. You need ^8", 300, " ^7coins.");
        return;
    }
    //iprintln("current weapon: " + );
    //player giveWeapon("greasegun_mp");
    //player giveMaxAmmo("greasegun_mp");
    player setWeaponSlotWeapon("primaryb", "tt30_mp");
    player giveMaxAmmo("primaryb");
    player giveMaxAmmo("primaryb");
    player giveMaxAmmo("primaryb");
    player giveMaxAmmo("primaryb");
    player switchToWeapon("tt30_mp");
    player iprintln("^7[^8NOTICE^7] ^8TT30 purchased (price: ^8"+300+"^7)");
    player mod\PLAYER::subMoney(300);
    player playsound("weap_pickup");
}
shopTT30(pos, dir)
{
    gun = mod\UTILS::spawnXmodel("xmodel/weapon_tt30", pos, dir-90);
    gun entityToWall(dir, 2);
    gun thread mod\TRIGGER::spawnUseTrigger(
        ::tt30_buy,
        game["shop_tt30_hunter"],
        game["shop_tt30_zombie"]
    );
    gun.trigger.origin += (0,0,-50);
}